首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哈斯克尔蓄电池厂

哈斯克尔蓄电池厂
EN

Stack Overflow用户
提问于 2015-10-22 13:58:50
回答 1查看 147关注 0票数 2

现在,在我的编程冒险开始时,我在理解基本概念时遇到了一些问题。这里有一个与Haskell或可能一般的功能范式相关的例子。

以下是factory中关于累加器工厂问题的一般说明

编写一个函数

  • 获取一个数字n并返回一个函数(让我们称它为g),该函数接受一个数字i,并从函数g(i)的每次调用中,返回因i的累积而递增的n。
  • 适用于任何数字类型--也就是可以同时接受整数和浮点数,并返回可以同时接受整数和浮点数的函数。(仅仅将所有输入转换为浮动是不够的。只看到整数的累加器必须返回整数。)(也就是说,如果语言不允许数字多态性,则必须使用重载或类似的方法)
  • 生成函数,返回传递给它们的每个数字的和,而不仅仅是最近的。(这需要一段状态来保存累积值,这意味着纯函数语言不能用于此任务。)
  • 返回一个真正的函数,这意味着您可以在任何地方使用程序文本中以普通方式定义的函数。(在这里遵循你的语言惯例。)
  • 不会以可能导致其他代码无意中修改它们的方式存储累积值或返回的函数。(没有全局变量或其他类似的东西。)

正如我所理解的,关键是:“.创建一个函数.生成函数,返回传递给它们的每一个数字的和,而不仅仅是最近的。(这需要一段状态来保存累积值,这又意味着纯函数语言不能用于这项任务。”

我们可以在同一个网站上找到一个Haskell解决方案,而且它似乎做了上面引用的内容。

在这里,http://rosettacode.org/wiki/Category:Haskell说,Haskell纯粹是功能性的。

那么,对这种明显矛盾的解释又是什么呢?或者也许没有矛盾,我只是缺乏一些理解?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-22 14:52:44

Haskell解决方案实际上并不完全遵循挑战的规则。特别是,它违反了这样一条规则,即函数“返回一个真正的函数,这意味着您可以在任何地方使用以普通方式在程序文本中定义的函数。”它不是返回一个真正的函数,而是返回一个ST计算,该计算产生一个本身产生更多ST计算的函数。在ST“状态线程”的上下文中,可以创建和使用可变引用(STRef)、数组和向量。但是,这种可变状态不可能在状态线程之外“泄漏”,从而污染纯代码。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33282863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档