问题标签 [pure-function]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
651 浏览

d - 如何在 D 2.0 中使用 pure

在玩 D 2.0 时,我发现了以下问题:

示例 1:

这可以按预期编译和工作。

当我尝试将字符串数组包装在一个类中时,我发现我无法让它工作:

此代码不会编译,因为 addMsg 函数不纯。我无法使该函数成为纯函数,因为它会更改 TestPure 对象。我错过了什么吗?或者这是一个限制?

以下确实编译:

~= 运算符不会被实现为 msg 数组的不纯函数吗?为什么编译器在 run1 函数中没有抱怨呢?

0 投票
5 回答
2789 浏览

f# - 使用 F# 的纯函数式

是否可以强制 F# 表现得像Haskell这样的纯函数式语言?也许使用一些编译器指令?

PS:由于我来自C/C++背景,我想强迫自己学习函数式编程而不学习Haskell :)

0 投票
6 回答
9083 浏览

function - 幂等函数和纯函数一样吗?

我阅读了维基百科对幂等性的解释。我知道这意味着一个函数的输出是由它的输入决定的。但我记得我听说过一个非常相似的概念:纯函数。我谷歌他们,但找不到他们的区别......

它们是等价的吗?

0 投票
1 回答
124 浏览

functional-programming - 返回 D 中函数的函数的纯函数

我正在尝试创建一个纯函数,它返回两个其他纯函数的乘法:

不幸的是,我遇到了问题,第一,我想将 f1 和 f2 声明为定义了 opCall 的纯函数/委托/类......这是必需的,因为我从纯函数调用它们。

但是第二点,似乎是最有问题的,是我希望 f1 和 f2 成为一个函数,返回一个“真实”值的“真实”变量......但我不知道如何模板化这个出...

有人有想法么?

0 投票
5 回答
7105 浏览

function - 为什么“纯”函数称为“纯”?

纯函数是没有副作用的函数——它不能做任何类型的 I/O,也不能修改任何东西的状态——而且它是引用透明的——当使用相同的输入多次调用时,它总是给出相同的输出。

为什么用“纯”这个词来描述具有这些属性的函数?谁首先以这种方式使用“纯”这个词,什么时候?有没有其他意思大致相同的词?

0 投票
2 回答
203 浏览

d - 纯函数返回纯是什么意思?

纯函数返回纯是什么意思?

代码编译不给出redundant storage class pure,所以我想这不是一个错误?

// DMD 2.056

0 投票
2 回答
279 浏览

d - 这个纯函数如何能够修改非私有状态?

TDPL,第 167:

只要函数中的可变状态是完全暂时的(即,分配在堆栈上)和私有的(即,不通过引用可能污染它的函数传递),那么该函数就可以被认为是纯的。

可变状态是暂时的,因为它在堆栈上,对吗?但这不是私人的。那么如何foo()允许修改m1呢?

0 投票
3 回答
2518 浏览

f# - 如何判断 F# 函数是否为纯函数?

假设我有这两个 F# 函数:

显然 sq 是纯的,因为它总是为给定的输入返回相同的值,而 tm 是不纯的,因为每次调用它都会返回不同的值。

一般来说,有没有一种方法可以确定 F# 中的特定函数是纯函数还是不纯函数,而无需分析它的作用,换句话说,就是逐行读取它?

或者,有没有办法在编写函数时注释函数以告诉编译器该函数是纯函数还是不纯函数?

最后,当调用作为公共语言运行时一部分的函数(例如 DateTime)时,如何不尝试就判断它是纯函数还是不纯函数?

注意:“纯”是指来自维基百科的定义:http ://en.wikipedia.org/wiki/Pure_function (永久链接

在计算机编程中,如果关于函数的以下两个陈述都成立,则可以将函数描述为纯函数:

  1. 给定相同的参数值,该函数始终评估相同的结果值。函数结果值不能依赖于任何可能随着程序执行或程序的不同执行而改变的隐藏信息或状态,也不能依赖于来自 I/O 设备的任何外部输入。

  2. 结果的评估不会导致任何语义上可观察的副作用或输出,例如可变对象的突变或输出到 I/O 设备。

0 投票
2 回答
1185 浏览

haskell - Haskell:陷入 IO monad

我正在尝试使用包parseFile中的函数解析文件haskell-src-exts

我正在尝试使用其输出parseFile当然是IO,但我无法弄清楚如何绕过IO. 我找到了一个功能liftIO,但我不确定这是否是这种情况下的解决方案。这是下面的代码。

我只想能够pMod'parseFile.

请注意,所有类型和数据构造函数都可以在http://hackage.haskell.org/packages/archive/haskell-src-exts/1.13.5/doc/html/Language-Haskell-Exts-Syntax.html找到,如果这有帮助。提前致谢!

0 投票
2 回答
142 浏览

d - 使用调试语句逃避安全

我知道

pure函数中,但是我仔细标记为@safe的函数@trusted呢?DMD 目前不允许debug writeln's 在那些,因为writeln目前和类似的是@system。恕我直言,这非常令人沮丧。有没有一种巧妙的方法来逃避安全,还是我必须暂时注释掉我所有的@safe@trusted标签?