懒惰语言为什么不支持变异?

时间:2010-05-30 00:24:47

标签: programming-languages lazy-evaluation mutation

我正在学习编程语言理论,我无法弄清楚懒惰语言没有变异的可靠原因。有人知道原因吗?

2 个答案:

答案 0 :(得分:7)

Laziness意味着在使用其返回值之前(或除非)实际上不评估函数。这意味着函数调用不一定按照它们在代码中出现的顺序进行评估。它还意味着不能有void函数,因为它们永远不会被评估(因为它不可能使用不存在的返回值)。

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

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

答案 1 :(得分:1)

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