fix f = let {x = f x} in x
谈到 let
,我认为 let P = Q in R
将首先求出 Q -> Q',然后用 Q' 替换 R 中的 P,即: R[P -> Q']
。
但是在 fix
定义中,Q 取决于 R,那么如何进行求值呢?
我想这与惰性求值有关。Q' 变成了一个 thunk,但我无法在脑海中推导出这一点。
作为背景,我在研究 Y 组合子,它应该能够找到函数的不动点,因此如果我有这个函数,one x = 1
,那么 fix one == 1
必须成立,对吗?
因此,fix one = let {x = one x} in x
,但我不明白 1
是如何从中产生的。
f x
依赖于x
,而不是f
依赖于x
。你之所以说后者,只是因为你知道f
被应用到了x
上,所以你提到了f
,但你在想的是f x
。 - chidef x(): if ... then use x() else ...
来调用自身。在 Haskell 中,即使对于非函数,您也可以这样做(因为 Haskell 是惰性的)。 - chi