language-agnostic - 这个高阶函数有名字吗?

标签 language-agnostic idioms generic-programming higher-order-functions

我在我的代码和库中到处都看到这种模式,但似乎没有任何地方可以找到它的名称或抽象。

示例(伪代码)

T foo( T x, void f(T&) )
{
    T y = x;
    f( y );
    return y;
}

基本上:取一个值,以及一个转换该值的函数。制作一个值的副本,转换它,然后返回它。

现实生活中的例子 (C++)
T operator+(const T& x, const T& y)
{
    T z = x; // Make a copy
    operator+=(z, y); // Modify in place
    return z;
}

Vector3 Vector3::normalized() const
{
    Vector3 x = *this; // Make a copy
    x.normalize(); // Modify in place
    return x;
}

T sorted(T const& x)
{
    T y = x; // Make a copy (yeah, yeah, could have passed by value)
    sort( y ); // Modify in place
    return y;
}

基本上,你有一个就地函数(有副作用),并从中创建一个非就地函数(没有副作用)。

这个图案有名字吗?您知道使用它的任何库或语言吗?显然,函数式语言不会使用它,因为它们一开始就没有引用不透明的函数。

最佳答案

它实际上在数学和 FP 中被称为组合,因为您可以将其表示为 mystery_function(x, fun) = fun(copy(x))反而。

在设计模式语言中,它是一个包装器,用一个副本包装函数调用。所以我宁愿自然地称它为复制包装 .但我从未在任何地方看到它分类。

关于language-agnostic - 这个高阶函数有名字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4192231/

相关文章:

language-agnostic - 一个类应该直接使用它的私有(private)成员还是公开暴露的成员函数?

go - 如何以惯用方式构建现有包的扩展

c++ - C++ 中的通用函数包装器是否可行?

scala - 扩展泛型类型 - PriorityQueue

language-agnostic - 比较对象时 null == null 是否应该为真?

algorithm - 模糊字符串记录搜索算法(支持单词转置和字符转置)

"foo.nil? ? nil : foo.to_i"的 Ruby 习语?

C++ - 如何在不重载比较运算符的情况下为 std::max 专门化自定义类型?

algorithm - 什么是计算笛卡尔积的良好非递归算法?

c++ - 是否有与 memmove 等效的标准库?