这个高阶函数有名称吗?

时间:2017-05-05 01:53:46

标签: f#

我经常想要将相同的参数两次应用于二元函数f,这个convert函数/组合符是否有名称?

// convert: f: ('a -> 'a -> 'b) -> 'a -> 'b
let convert f x = f x x

示例用法可能部分应用convert和乘法运算符*来修复被乘数和乘数:

let fixedMultiplication = convert (*)

fixedMultiplication 2 // returns 4

2 个答案:

答案 0 :(得分:3)

该组合子通常称为warbler;这个名字来自Raymond Smullyan的书To Mock a Mockingbird,它有一系列关于组合函数的逻辑谜题,以鸟类的形式呈现,可以模仿彼此的歌曲。请参阅Suave中的this usagethis page,其中列出了一大堆组合函数(“标准”函数和一些不太知名的函数),以及Smullyan在其中给出的名称。书。

答案 1 :(得分:1)

对F#中所谓的内容并不是真正的答案,但在APLJ中,它被称为“反身”(或可能是“反射”)运算符。在APL中,它拼写为并且单独使用 - 即应用于一个函数(在其左侧)。在J中,它被称为~,并以相同的方式使用。

例如:f⍨ x等同于x f x(在APL中,带有两个参数的函数总是以二进制中缀方式使用)。

因此,“fixedMultiplication”(或方形)函数在APL中为×⍨,在J中为*~