- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这里是真正的初学者,我正在阅读 NF 和 WHNF 之间的差异,以及我遇到的定义之一
To determine whether an expression is in weak head normal form, we only have to look at the outermost part of the expression.
'h' : ("e" ++ "llo") -- the outermost part is the data constructor (:)
(1 + 1, 2 + 2) -- the outermost part is the data constructor (,)
\x -> 2 + 2 -- the outermost part is a lambda abstraction
最佳答案
好问题。此处,“最外层”(或“最顶层”)根据表达式的一种标准抽象 View 来描述位置,该 View 可能与其实际语法不同。例如,这两个表达式:
(1, 2)
(,) 1 2
(,)
是表达式的最外层部分,即使表达式具有不同的句法形式,逗号出现在句法中的不同物理位置。
fexpr expr1 .. exprn
1 + 2 -- infix operators
(3, 4) -- tuples
[5,6,7,8] -- lists
"abc" -- strings
1 + 2 ==> (+) 1 2
(3, 4) ==> (,) 3 4
[5,6,7,8] ==> (:) 5 ((:) 6 ((:) 7 ((:) 8 [])))
"abc" ==> (:) 'a' ((:) 'b' ((:) 'c' []))
(+)
是一个变量,其值是一个函数(如
sqrt
);而
(,)
和
(:)
是构造函数(就像
True
或
Just
)。更令人困惑和更明显的是,即使
[1,2,3]
是特殊语法,空列表
[]
也是一个(一元)构造函数!这就是为什么我仍然在我的标准语法版本的右侧使用空列表的原因。
True -- a nullary constructor
(,) (1+2) (2+3) -- constructor expecting two args and fully applied
(:) 5 -- constructor partially applied and expecting one more arg
(\x y -> (+) x (length y))
w -- a variable
(\x -> x) 10 -- an applied lambda abstraction
(f x) y ((*) 2 z) -- some other function application
(+) 10 (length (1:[])) -- another function application
Just (5+6)
在 WHNF 中,因为最外层是构造函数
Just
的应用。另一方面,
sqrt (5+6)
在 WHNF 中是
而不是 因为最外层是变量
sqrt
的应用,而变量不是构造函数。
5+6
本身不在 WHNF 中,因为最外层是变量
(+)
对
5
和
6
的应用,而
[5,6]
在 WHNF 中,因为最外层是(隐含的)构造函数
(:)
对
5
和
[6]
的应用。
关于haskell - Haskell 中表达式的 'outermost part' 是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51235703/
题目地址:https://leetcode.com/problems/best-sightseeing-pair/ 题目描述 Given an array A of positive intege
这里是真正的初学者,我正在阅读 NF 和 WHNF 之间的差异,以及我遇到的定义之一 To determine whether an expression is in weak head normal
我正在尝试在没有最外层变量的情况下在 d3.js 中绘制包布局。我想绘制一个没有最外层父圆的包装布局。有什么办法吗? 最佳答案 是的,有。我建议采用以下方法:保持所有圆包初始化完好无损。您只需更改圆圈
我正在使用 dojo.query,它在内部使用 CSS3 选择器来识别您要检索的元素。 我要查找的是所有带有标签“foo”的元素,但仅限于最外层的元素(即允许将一个“foo”嵌入到另一个元素中,而我想
在Java Language Spex 15.7 : Code is usually clearer when each expression contains at most one side ef
在 django 1.5 天,如果我想手动管理事务(或事务中的事务),我会这样做: @transaction.commit_manually def my_method(): master_s
我一直在阅读 C++ 入门第 5 版。在第 6.1 章功能参数列表的第三段中。它写道“此外,函数最外层范围内的局部变量不得使用与任何参数相同的名称”。什么意思? 我不是以英语为母语的人。我不明白函数的
我是一名优秀的程序员,十分优秀!