【发布时间】:2018-06-28 20:47:49
【问题描述】:
鉴于这行 Haskell 代码,我的任务是将其评估为最简单的形式。
let g h k = (\x -> k (h x)) in g (+1) (\x -> x+x) 20
我已经得到了答案(当然,我自己也在 GHCI 中对其进行了评估):42
但是,我想更好地了解评估在此处的实际运作方式。总的来说,我想我知道(简单) let 表达式是如何工作的:
例子
a = let y = 5 in y * 5 -- a == 25
计算结果为25,因为我们将y 绑定到5 的值,并且a 被分配给y*5 的值(in 之后的部分)。绑定y = 5只在let范围内有效。
到目前为止,唯一的解释(至少计算为 42)如下:
let g h k = (\x -> k (h x)) in g (+1) (\x -> x+x) 20
-
g是(\x -> k (h x)) -
h是(+1)(函数(\x -> x+1)) -
k是(\x -> x+x)-
20是g的输入,产生k (h 20) -
h 20给20 + 1=21 -
k (h 20)=k 21=21 + 21=42
-
但让我感到困惑的是在 let 之后使用g h k。这是什么意思?
【问题讨论】:
-
不,
g是g = \h k x -> k (h x)左边的变量也是参数。
标签: haskell lambda anonymous-function let expression-evaluation