【发布时间】:2020-08-19 09:42:25
【问题描述】:
我是 Haskell 的新手,我有一个问题
h x = x : (h x)
g xs = [head xs, head xs - 1]
假设语义是按名称调用和按值调用,运行 g(h 2) 的结果是什么?
【问题讨论】:
-
g (h 2) = [2,1]. -
结果将是
[2, 1],您可以通过在 GHCi 中运行它来轻松验证。 “按名称调用”与“按值调用”在 Haskell 中并没有真正的区别,因为默认情况下值是不可变的,只有可变值才有意义。 -
这就是我混淆的原因,我知道其中一个是 [2,1],另一个可以是 [2,1 ..] 或无限循环。这就是为什么我不确定
-
Haskell 处理不可变数据,因此无法“更改”变量的值,因此您无法更新值并调用函数并期望结果会/不会发生变化。跨度>
-
你为什么认为它在这里
[2,1,...]?请注意,Haskell 使用惰性编程,这是一个在“调用风格”上“正交”的概念。
标签: haskell semantics evaluation call-by-value callbyname