lambda演算中λx.λf.fx的名称是什么(类似于反向应用)?编程中相应的功能是否有标准名称?


15

lambda演算中λx.λf.fx的名字是什么?

相应的函数在函数式编程语言(例如Haskell)中是否具有标准名称?

在面向对象的编程中,是否存在foo以函数作为参数并x.foo(f)返回的方法的常规名称f(x)


3
您需要购买字典。
罗伯特·哈维

13
哪一个?哪里?多少?
阿列克谢

4
我不明白反对票。在我看来,这是一个完全合理的问题。
乔治

我在下面发布了一个答案,但我意识到OP正在询问此lambda表达式的名称是什么,因此我删除了= D
Jason,

您所指的概念称为组合器,如果您不熟悉en.wikipedia.org/wiki/SKI_combinator_calculus,请在此处阅读,尽管我不熟悉您所指的性质的已知组合器,C BCKW很近(它是翻转的),但是不一样 en.wikipedia.org/wiki/B,C,K,W_system为什么不找点乐子,想出那些组合器的组合来产生功能:)
Jimmy Hoffa

Answers:


9

在Haskell中,\x.\f.f xflip ($)$读为apply,我将其读为反向apply

大致基于/programming/4090168/is-there-an-inverse-of-the-haskell-operator


这个错误...翻转是\f.\x.\y.f y x翻转,在这里是C en.wikipedia.org/wiki/B,C,K,W_system
Jimmy Hoffa

还增加了$这样的翻转功能,期望部分应用的函数会接管2个参数,而您只翻转最后2个参数,因此您将部分应用除2个参数以外的所有参数
Jimmy Hoffa

6
因此,您怀疑(\f.\x.\y.f y x) (\f.\x.f x)减少到(\x.\f.f x)模数重命名吗?是的。
Dan D.

5

使用标准组合器,您可以将该功能表示为

C I

哪里

C f x y = (f y) x

在Haskell中

flip id

这里id的类型专用于(a -> b) -> a -> bflip交换a -> ba

您也可以在SKI演算中表达它:

S (K (S I)) K

+1用于推导组合器。我真的不怀疑这是众所周知的事情,尽管如果他确定这与教堂数字有关,我倾向于怀疑CI是否在任何教堂数字研究中被记录为任何相关文献
吉米·霍法

5

在原始的Alonzo Church的“ lambda转换的计算”中,他用T表示该组合器。

在教堂数字的上下文中,它称为exp。这与教会用于术语N到术语M的“应用”的Church的“速记”符号相匹配:“ [[ M N ]”代表“(NM)”。

我还没有听说过类似函数的标准名称。


3

有时将其称为画眉组合器,在Clojure中将其称为线程优先宏。它的主要用途是允许您按照执行顺序将计算表达为一系列链接的计算。例如,将一个值x,将其传递给一个函数f,然后将其结果传递f(x)给一个函数g,将被写为g(f(x))使用标准函数组合(或者g (f x)使用隐式括号)。当存在大量链接函数时,这可能会很尴尬,因为您必须以相反的顺序阅读它们。如果我们将画眉组合器定义为:

T x f = f x
T x f g ... = T (T x f) g ...

然后,表达式T x f g h变为h (g (f x))

(对于那些寻求更多信息以及使用Racket语言进行具体实现的人,我有一篇有关该主题的博客文章:Thrush组合器


2

我希望我能正确理解您的问题,但是我相信这在ML语言中被称为(反向)管道运算符。

[1; 2; 3] |> List.map sq // let it = [1; 4; 9]

还有一个反向管道操作器,可帮助您确定操作顺序。

printf "The value is.." <| 2 + 3 // let it = "The value is..5"

这很有用,因为非管道形式

printf "The value is.." 2 + 3 ;; error

会出错,因为printf会尝试求值"The value is.." 2并出错,因为没有定义的+运算符。为了使该工作有效,请使用括号:

printf "The value is.." (2 + 3) // let it = "The value is..5"

对于实际使用来说,|>运算符非常有用,并且是许多ML和ML启发式语言(如F#,LiveScript和Elixir)的基础。<|少见,通常仅在增加可读性时使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.