7

我正在学习编程语言理论,但我无法弄清楚为什么惰性语言没有突变。有人知道原因吗?

4

2 回答 2

7

惰性意味着直到(或除非)它的返回值被使用时才真正评估一个函数。这意味着函数调用不一定按照它们在代码中出现的顺序进行评估。这也意味着不能有 void 函数,因为它们永远不会被评估(因为不可能使用不存在的返回值)。

然而,对于执行副作用的函数(如突变,但也只是打印到屏幕),它们执行的顺序确实很重要。更重要的是他们被处决了。这意味着惰性语言需要一种方法来模拟特殊类型的副作用,以确保它们以正确的顺序执行和执行。

由于完全没有副作用的程序是没有用的(你需要能够打印到屏幕上),惰性语言实际上确实支持副作用。它们只是用 IO monad 或唯一性类型封装它们。例如,haskell 确实有可变数组,但它们只能在 IO monad 中使用。

于 2010-05-30T00:36:46.493 回答
1

突变意味着您无法随时确定程序的状态,并且必须担心任何操作的副作用。我实际上已经考虑过了,我想不出任何方法来拥有一种支持突变的完全惰性语言。(虽然我不是计算机科学家。)

于 2010-05-30T00:33:58.593 回答