pseq可以用seq来定义吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pseq可以用seq来定义吗?相关的知识,希望对你有一定的参考价值。

据我所知,seq a b在返回a之前评估(强制)bb。它不保证首先评估a

pseq a b首先评估a,然后评估/返回b

现在考虑以下内容:

xseq a b = (seq a id) b

函数应用程序需要首先计算左操作数(以获得lambda形式),并且在进入函数之前不能盲目地评估右操作数,因为这会违反Haskell的非严格语义。

因此,(seq a id) b必须首先评估seq a id,这迫使aid(在一些未指定的顺序(但评估id什么都不做)),然后返回id b(这是b);因此xseq a ba之前评估b

xseqpseq的有效实现吗?如果没有,上面的论点有什么问题(根据pseq可以定义seq)?

答案

答案似乎是“不,至少没有额外的魔力”。

这个问题

xseq a b = (seq a id) b

是编译器可以看到seq a id的结果是id,这在任何地方都是严格的。如果函数是严格的,则允许函数应用程序首先计算参数,因为这样做不会改变表达式的语义。因此,优化编译器可以首先开始评估b,因为它知道它最终将需要它。

以上是关于pseq可以用seq来定义吗?的主要内容,如果未能解决你的问题,请参考以下文章

在片段中,如何查找活动布局中定义的视图?

这可以用无点风格表达吗?

python seq2seq摘要项目片段

易基因 ChIP-seq技术简介

动态链表增删改查及排序功能

代码片段:Shell脚本实现重复执行和多进程