我正在学习编程语言理论,我无法弄清楚懒惰语言没有变异的可靠原因。有人知道原因吗?
答案 0 :(得分:7)
Laziness意味着在使用其返回值之前(或除非)实际上不评估函数。这意味着函数调用不一定按照它们在代码中出现的顺序进行评估。它还意味着不能有void函数,因为它们永远不会被评估(因为它不可能使用不存在的返回值)。
然而,对于执行副作用的功能(如突变,但也只是打印到屏幕),它们执行的顺序很重要。更重要的是他们完全被执行了。这意味着延迟语言需要一种方法来模拟特殊类型的副作用,以确保它们以正确的顺序执行和执行。
由于完全没有副作用的程序是无用的(你需要能够在屏幕上打印),懒惰语言实际上支持副作用。它们只是用IO monad或唯一性类型封装它们。例如,haskell确实有可变数组,但它们只能在IO monad中使用。
答案 1 :(得分:1)
突变意味着您无法在任何时候确定程序的状态,并且必须担心任何操作的副作用。我实际上已经考虑过了,我想不出有任何方法可以使用支持变异的完全懒惰的语言。 (我不是计算机科学家。)