【问题标题】:What does 'pure' in functional programming mean if an application mutates the stack?如果应用程序改变堆栈,函数式编程中的“纯”是什么意思?
【发布时间】:2016-06-26 04:50:39
【问题描述】:

我们知道pure functions

  1. 对于给定的输入总是返回相同的结果
  2. 不产生副作用

这将我们引向referential transparency - 一个表达式可以用一个值替换而不改变程序的行为

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

这个commentator wrote

考虑到 FP 设置中“纯”的实际含义,考虑到应用程序本身是一种变异协议(堆栈)

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

【问题讨论】:

  • 如果堆栈不存在则意味着相同?堆栈只是一个实现细节,在定义“纯”函数时应该无关紧要。

标签: functional-programming side-effects purely-functional mutation referential-transparency


【解决方案1】:

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

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

【讨论】:

  • 是否有可能实现不改变堆栈的机器?
  • 当然可以有不改变“堆栈”甚至没有堆栈的实现,但我相当肯定有一台计算某些东西的物理机器将会发生变异(我会很高兴听到我错了)。
  • 你能指出这样的非堆栈变异机器实现吗?
  • 需要子程序吗? :) 我不确定你在找什么,但你可以试试the RS08(它没有系统堆栈/堆栈指针),stackless python(它几乎还有一个堆栈,它只是在堆中)和cps(可以使用系统堆栈或堆来实现)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-08
  • 2011-05-09
  • 1970-01-01
  • 2023-03-09
相关资源
最近更新 更多