如果应用程序改变堆栈,'pure' 在函数式编程中意味着什么?

What does 'pure' in functional programming mean if an application mutates the stack?

我们知道pure functions

  1. 对于给定的输入总是return相同的结果
  2. 没有副作用

这将我们引向 referential transparency - 其中 可以在不改变程序行为的情况下用值替换表达式

这告诉我们,如果一个程序 排除了程序 运行 环境中实体的破坏性修改(更新),则该程序可以说是 purely functional .

这个commentator wrote:

grappling with what "pure" in an FP setting actually means, considering application itself is a protocol for mutation (the stack)

我的问题是:如果应用程序改变堆栈,函数式编程中的 'pure' 是什么意思?

函数改变堆栈的事实是机器实现的结果。定义 pure 并不重要,就像使用 'value' 需要改变处理器内核中的寄存器这一事实无关紧要。

如果一个函数不改变(或依赖)它自己的堆栈框架之外的任何东西(例如全局变量、io、随机性),它仍然可以被视为纯函数。