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)