【问题标题】:What is a pure function?什么是纯函数?
【发布时间】:2014-03-08 11:42:29
【问题描述】:

我找到了这句话:

  1. Make 预测纯函数。

谓词纯度:谓词是返回是/否答案的函数对象,通常作为 bool 值。一个函数是纯的 如果其结果仅取决于其论点,则具有数学意义 (请注意,“纯”的这种使用与纯虚拟无关 函数)。

不允许谓词保持或访问影响结果的状态 他们的operator(),包括成员和全局状态。 更喜欢使 operator() 成为 const 成员函数 谓词(参见第 15 条)。

什么是本声明中提到的纯函数,有人可以提供示例吗?提前致谢。

【问题讨论】:

  • 引用提供了一个定义,所以不清楚哪一部分你觉得困惑?

标签: c++ function predicate


【解决方案1】:

这是一个纯函数:

int foo(int n)
{
  return n*2;
}

调用它的结果只取决于它的参数。

这不是一个纯函数:

int i = 42;

int bar(int n)
{
  ++i;
  return n*i;
}

返回值取决于参数以外的东西。

【讨论】:

  • 当然最简单的 put 函数是空操作 int f(int n) { return n; }
  • @EdHeal 或者只是return 42;
【解决方案2】:

函数是纯的,如果:

  1. 它没有语义上可观察到的副作用
  2. 在相同的输入下总是返回相同的结果

所以函数仍然可以有状态,但它不应该是可观察的。例如:

int foo(std::vector<int> v) {

  static std::vector<int> tmp;
  tmp.resize(v.size);

  std::transform(v.begin(), v.end(), tmp.begin(), [](int a) {return a * a;});
  return std::accumulate(tmp.begin(), tmp.end(), 0);
}

function foo 有一个状态(静态向量),但是它在语义上是不可观察的,因此它是纯粹的。这是一个愚蠢的功能,但它应该表明这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-02
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 2020-06-09
    相关资源
    最近更新 更多