[英]Is the expression (_, 'b') in Normal Form? in Weak Head Normal Form?
不幸的是,作者在这些问题中做出了一个错误的决定,即使用_
字符。 正如@Alec所指出的那样,代码字符串(_,'b')
不是有效的Haskell表达式(因为_
是只能在模式中出现的保留标识符),因此询问(_,'b')
是否在正常形态(NF)或弱头正常形态(WHNF)有点像询问大象是NF还是WHNF。 这真的没有道理。
如果问题改为询问(x, 'b')
,那将是一个更好的问题。 这是有效的Haskell表达式。 我们可以说它在WHNF中是因为它的“头”(表达式的最外面的部分)是数据构造函数。 在这种情况下,是元组构造函数(,)
具有特殊的语法,因此它比平时更不明显,但是请注意(x, 'b')
可以重写(,) x 'b'
从而显然,“ head”是数据构造函数(,)
。 但是,它不能在NF中,因为x
尚未得到完全评估(即,尚未被其值替换,该值可能在其他地方给出)。
与此相反, (1, 'b')
将是在两个WHNF(因为它的头是数据构造(,)
并在NF因为该数据构造被完全应用到的参数和每个这些参数都得到了充分评价。
现在,我认为作者的意图是_
代表否则有效表达式中某些未指定,未评估的部分,因此他或她希望您推断( (_, 'b')
在WHNF中(因为头部是数据构造函数(,)
),但不在NF中(因为存在一个未评估的部分_
浮动)。 因此,“正确”的答案是“仅WHNF”。
有帮助吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.