F# 这个高阶函数有名字吗?

F# 这个高阶函数有名字吗?,f#,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 这种组合体通常被称为莺;这个

我经常想对二进制函数
f
应用相同的参数两次,这个
convert
函数/组合器有名字吗

// convert: f: ('a -> 'a -> 'b) -> 'a -> 'b
let convert f x = f x x
示例用法可能是使用乘法运算符
*
部分应用
convert
,以修复被乘数和乘法器:

let fixedMultiplication = convert (*)

fixedMultiplication 2 // returns 4

这种组合体通常被称为莺;这个名字来自雷蒙德·斯穆利安(Raymond Smullyan)的书,书中有一系列围绕组合函数的逻辑谜题,以鸟类的形式呈现,它们可以模仿彼此的歌声。参见Suave,其中列出了一大堆组合函数(“标准”函数和一些不太知名的函数),以及Smullyan在其书中给出的名称。

并不是对F#中所称的答案,但在or中,它被称为“反射”(或“反射”)操作符。在APL中,它被拼写为
并一元使用–即应用于一个函数(在其左侧)。在J中,它被称为
~
,并以同样的方式使用

例如:
f⍨ x
相当于
xfx
(在APL中,采用两个参数的函数总是以二进制中缀方式使用)


所以“fixedMultiplication”(或square)函数是
×⍨或J中的
*~

这是函数的一元
连接操作符<代码>连接
具有类型

Monad m => m (m a) => m a
和函数形成一个单子,其中输入类型是固定的(即,
((->)a
),因此
连接具有类型:

(a -> (a -> b)) -> (a -> b)