我正在Haskell学习语法考试,希望能得到一些关于为什么这等于2的帮助:
“考虑函数:f= let =f (f )中的x+1,f中let x=0的值是多少?”
答案是2。
但是“让f= x+1”意味着f (x+1)。如果我们让x=0,那不是f(1)吗?
感谢您的阅读
发布于 2022-01-07 19:53:54
有两种不同的功能正在使用。在原始函数中,不存在递归;所有对f的引用都引用由let表达式定义的函数,而不是定义的函数。还有两个不同的作用域,它们都包含一个名为x的变量。如果您重命名内部函数及其参数,则会更清楚:
f x = let f' x' = x' + 1 in f' (f' x)现在,另一个表达式更容易使用等式推理进行评估:
let x = 0 in f x == f 0
== let f' x' = x' + 1 in f' (f' 0)
== (f' 0) + 1
== (0 + 1) + 1
== 1 + 1
== 2https://stackoverflow.com/questions/70626313
复制相似问题