【发布时间】:2016-01-21 20:10:09
【问题描述】:
现在,在我开始编程冒险时,我在理解基本概念时遇到了一些问题。这是与 Haskell 或一般功能范式相关的一个。
这里是蓄能器工厂问题的一般性陈述,来自 http://rosettacode.org/wiki/Accumulator_factory
[写一个函数]
接受一个数字 n 并返回一个函数(我们称之为 g),该函数接受一个数字 i,并返回 n,每次调用函数 g(i) 时 i 的累加都会增加。
适用于任何数字类型——即可以同时接受整数和浮点数,并返回可以接受整数和浮点数的函数。 (仅仅将所有输入转换为浮点数是不够的。只看到整数的累加器必须返回整数。)(即,如果语言不允许数字多态性,则必须使用重载或类似的东西)
生成的函数返回曾经传递给它们的每个数字的总和,而不仅仅是最近的。 (这需要一个状态来保存累积的值,这反过来意味着纯函数式语言不能用于此任务。)
返回一个真正的函数,这意味着您可以在任何可以使用您在程序文本中以普通方式定义的函数的地方使用该函数。 (在此处遵循您的语言约定。)
不会以可能导致它们被其他代码无意修改的方式存储累积值或返回的函数。 (没有全局变量或其他类似的东西。)
据我了解,关键点是: “[...] 创建一个函数 [...] 生成的函数返回曾经传递给它们的每个数字的总和,而不仅仅是最近的。 (这需要一个状态来保存累积的值,这反过来意味着纯函数式语言不能用于此任务。)"
我们可以在同一个网站上找到一个 Haskell 解决方案,它似乎就像上面引用的那样。
这里 http://rosettacode.org/wiki/Category:Haskell 据说 Haskell 是纯函数式的。
那么对明显矛盾的解释是什么?或者也许没有矛盾,我只是缺乏一些理解?谢谢。
【问题讨论】: