标签: pure-function

是一个调用Math.random()纯函数的函数吗?

以下是纯函数吗?

function test(min,max) {
   return  Math.random() * (max - min) + min;
}
Run Code Online (Sandbox Code Playgroud)

我的理解是纯函数遵循以下条件:

  1. 它返回从参数计算的值
  2. 除了计算返回值之外,它不做任何其他工作

如果这个定义是正确的,我的函数是纯函数吗?或者我对定义纯函数的不正确理解是什么?

javascript function pure-function

110
推荐指数
8
解决办法
1万
查看次数

纯函数:“无副作用”是否意味着“在给定相同输入的情况下始终相同的输出”?

定义函数的两个条件pure如下:

  1. 无副作用(即仅允许更改本地范围)
  2. 给定相同的输入,始终返回相同的输出

如果第一个条件始终为真,那么是否有第二次条件不为真?

即真的只有第一个条件才需要吗?

javascript functional-programming language-lawyer pure-function

83
推荐指数
4
解决办法
6507
查看次数

幂等函数是否与纯函数相同?

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

它们是等价的吗?

function idempotent pure-function

56
推荐指数
4
解决办法
6023
查看次数

为什么"纯粹"的功能被称为"纯粹"?

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

为什么单词"pure"用于描述具有这些属性的函数?谁首先以这种方式使用"纯"这个词,何时?是否有其他词语意味着大致相同的事情?

functional-programming function purely-functional pure-function

39
推荐指数
3
解决办法
6730
查看次数

高阶函数返回纯函数

下面是一个名为functionA的高阶函数示例,它将customValue作为输入,并返回一个获取输入并使用自定义值来详细说明结果的函数:

let functionA = (customValue) => {
  let value = customValue || 1;
  return input => input * value;
};
Run Code Online (Sandbox Code Playgroud)

这是一些结果:

functionA()(4)             
// => returns 4

functionA(2)(4)
// => returns 8

functionA(3)(4)
// => returns 12

functionA(4)(4)
// => returns 16
Run Code Online (Sandbox Code Playgroud)

功能A返回的功能可以被认为是纯粹的吗?

更新:以上示例仅使用数字输入.正如@CRice所描述的那样,只有当customValue是常量且没有内部状态(如类)时,返回的函数才能被认为是纯函数.

javascript higher-order-functions pure-function

19
推荐指数
1
解决办法
973
查看次数

使用F#实现纯功能

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

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

f# functional-programming pure-function

15
推荐指数
2
解决办法
2441
查看次数

纯函数可以有自由变量吗?

例如,一个没有自由变量的引用透明函数:

g op x y = x `op` y
Run Code Online (Sandbox Code Playgroud)

现在是一个带有自由(从观点来看f)变量的函数opx:

x = 1
op = (+)
f y = x `op` y
Run Code Online (Sandbox Code Playgroud)

f也是参考透明的.但它是纯粹的功能吗?

如果它不是纯函数,那么引用透明的函数的名称是什么,但是使用一个或多个绑定在封闭范围内的变量?


这个问题的动机:

维基百科的文章中我不清楚:

结果值不需要依赖于所有(或任何)参数值.但是,它必须仅依赖于参数值.

(强调我的)

也不是从谷歌搜索纯函数是否可以依赖于free(在一个封闭范围中绑定的意义上,而不是在函数范围内绑定)变量.

另外,这本书说:

如果没有自由变量的函数是纯粹的,那么闭包是不纯的吗?

功能function (y) { return x }很有趣.它包含一个自由变量x.自由变量是未在函数内绑定的变量.到目前为止,我们只看到了一种"绑定"变量的方法,即通过传入一个具有相同名称的参数.由于该函数function (y) { return x }没有名为x的参数,因此变量x未在此函数中绑定,这使其"自由".

现在我们知道函数中使用的变量是绑定的还是空闲的,我们可以将函数分为具有自由变量的函数和不具有以下函数的函数:

  • 不包含自由变量的函数称为纯函数.
  • 包含一个或多个自由变量的函数称为闭包.

那么"纯函数"的定义是什么?

haskell functional-programming free-variable pure-function

15
推荐指数
1
解决办法
1300
查看次数

什么是JavaScript中不纯函数的示例

看过很多纯函数以及它们如何没有副作用,什么是不纯函数的例子,它总是被作为不稳定和主要错误来源而被对抗?

javascript pure-function

14
推荐指数
2
解决办法
6104
查看次数

如何在D 2.0中使用pure

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

例1:

pure string[] run1()
{
   string[] msg;
   msg ~= "Test";
   msg ~= "this.";
   return msg;
}
Run Code Online (Sandbox Code Playgroud)

这编译并按预期工作.

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

class TestPure
{
    string[] msg;
    void addMsg( string s )
    {
       msg ~= s;
    }
};

pure TestPure run2()
{
   TestPure t = new TestPure();
   t.addMsg("Test");
   t.addMsg("this.");
   return t;
}
Run Code Online (Sandbox Code Playgroud)

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

以下编译:

pure TestPure run3()
{
    TestPure t = new TestPure();
    t.msg ~= "Test";
    t.msg ~= "this.";
    return t;
}
Run Code Online (Sandbox Code Playgroud)

〜=运算符是否会被实现为msg数组的不纯函数?为什么编译器不会在run1函数中抱怨它?

d pure-function

10
推荐指数
1
解决办法
637
查看次数

为什么 println 被认为是一个不纯的函数?

我正在阅读 Scala 编程这本书,据说:

...在这种情况下,它的副作用是打印到标准输出流。

我没有看到副作用在哪里,因为对于相同的输入, println 将打印相同的输出(我认为)
UPDATE
例如,每当我们调用:

println(5)
Run Code Online (Sandbox Code Playgroud)

它将打印5,我没有看到调用println(5)会打印 5 以外的值的情况!

functional-programming scala pure-function

10
推荐指数
3
解决办法
701
查看次数