小编unn*_*olo的帖子

这怎么让表达起作用?

鉴于这一系列的Haskell代码,我的任务是将其评估为最简单的形式.

let g h k = (\x -> k (h x)) in g (+1) (\x -> x+x) 20
Run Code Online (Sandbox Code Playgroud)

我已经得到了答案(当然在GHCI中我自己进行了评估): 42

但是,我希望更好地了解评估在这里如何运作.一般来说,我想我知道如何(简单)让表达式工作:

a = let y = 5 in y * 5  -- a == 25
Run Code Online (Sandbox Code Playgroud)

该计算结果为25,因为我们绑定y到的价值5a被分配到的值y*5(后部分in).绑定y = 5仅在范围内有效let.

到目前为止,唯一的解释(至少评估为42)如下:

let g h k = (\x -> k (h x)) in g (+1) (\x -> x+x) 20
Run Code Online (Sandbox Code Playgroud)
  • g(\x -> k (h x)) …

lambda haskell anonymous-function let expression-evaluation

10
推荐指数
2
解决办法
318
查看次数