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

for*_*ana 7 programming-languages lazy-evaluation mutation

我正在研究编程语言理论,我无法弄清楚懒惰语言没有变异的可靠原因.谁知道原因?

sep*_*p2k 7

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

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

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