我正在研究编程语言理论,但我无法弄清楚懒惰的语言没有突变的充分理由。有人知道原因吗?

有帮助吗?

解决方案

懒惰意味着直到(或除非)使用其返回值之前,才真正评估函数。这意味着该函数调用不一定按照它们在代码中出现的顺序进行评估。这也意味着不能有空隙函数,因为它们永远不会被评估(因为无法使用不存在的返回值)。

但是,对于执行副作用的功能(例如突变,也只是在屏幕上打印)确实至关重要。更重要的是,他们根本被执行。这意味着懒惰的语言需要一种模仿特殊类型的副作用的方法,以确保它们以正确的顺序执行和执行。

由于完全无副作用的程序是没有用的(您需要能够完全打印到屏幕上),因此懒惰的语言实际上确实支持副作用。他们只是用io monad或唯一类型将它们封装。例如,Haskell确实具有可变的阵列,但是它们只能在IO Monad内使用。

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top