首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弱头法形与法态

弱头法形与法态
EN

Stack Overflow用户
提问于 2017-06-12 07:54:18
回答 2查看 798关注 0票数 0

我对弱智的正常形态和正常形态有疑问。

弱头范式的意思是,表达式只会在必要的范围内计算到数据构造函数.

范式意味着,表达式将被完全计算。

现在,我有以下表达:

代码语言:javascript
复制
\x -> x * 10

为什么上面的表达式是正常的?

代码语言:javascript
复制
"Papu" ++ "chon"

为什么上述表达既不在WHNF中,也不在NF中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-12 10:16:01

WHNF的计算值足以达到数据构造函数或lambda函数。

如果您有一个没有用参数调用的lambda函数,那么无论如何您都无法进一步评估它。因此,lambda函数在WHNF中,实际上是NF,因为没有什么可进一步评估的。现在,如果使用参数调用lambda函数,我们可以计算结果可能是什么。但是lambda功能本身呢?没有什么要做的了。

第一个表达式是一个没有参数的lambda函数。这就是它的正常形式。

第二个表达式既不是数据构造函数,也不是lambda,因此不是任何正常形式。现在,如果您对其进行一步评估,您将获得

代码语言:javascript
复制
'P' : ("apu" ++ "chon")

它(虽然语法看起来不像它)以数据构造函数(即(:))开头,因此在WHNF中,而不是NF (因为它仍然包含未计算的(++)子表达式)。

如果我们去掉infix语法,可能会更容易:

代码语言:javascript
复制
(++) "Papu" "chon"

vs

代码语言:javascript
复制
(:) 'P' ( (++) "apu" "chon" )
票数 6
EN

Stack Overflow用户

发布于 2017-06-12 10:16:14

X -> x* 10 为什么上面的表达式是正常的?

因为你不能简化它。

“帕普”++ "chon“ 为什么上述表达既不在WHNF中,也不在NF中?

首先,如果在NF中有某种表达,那就意味着它在WHNF中。这是WHNF的更严格的版本。

所以,我们可以重组你的问题。为什么上面的表达式不在WHNF?

简单的答案是:我们可以将其简化为"Papuchon"

如果你想知道WHNF和NF之间有什么区别,你可以阅读,例如,this

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44494156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档