Programming languages 为什么不';懒惰的语言不支持变异吗?

Programming languages 为什么不';懒惰的语言不支持变异吗?,programming-languages,lazy-evaluation,mutation,Programming Languages,Lazy Evaluation,Mutation,我正在学习编程语言理论,但我无法找到懒惰语言没有变异的确切原因。有人知道原因吗?突变意味着您无法在任何时候确定程序的状态,并且必须担心任何操作的副作用。我实际上已经考虑过了,我想不出任何方法来拥有一种支持变异的完全懒惰的语言。(虽然我不是计算机科学家。)懒惰意味着函数直到(或除非)使用其返回值时才进行实际计算。这意味着函数调用不一定按照它们在代码中出现的顺序进行计算。这还意味着不能有void函数,因为它们永远不会被计算(因为不可能使用不存在的返回值) 然而,对于执行副作用的功能(如突变,但也只是

我正在学习编程语言理论,但我无法找到懒惰语言没有变异的确切原因。有人知道原因吗?

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

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

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


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

换句话说,不是惰性语言不能有突变,而是你不想要它。虽然交互式程序需要副作用,但非交互式程序可能有用,即使它们完全没有副作用。他们可以把结果返回给打电话的人。很明显,我不是以英语为母语的人,谢谢你的更正