我注意到今天我正在和Haskell一起玩,有可能做类似的事情
($ 4) (> 3)
Run Code Online (Sandbox Code Playgroud)
产量True.这里发生了什么?有一些直觉会很棒.
我猜?它看起来像是($ 4)一个不完整的函数应用程序,但我感到困惑的是,它$是一个中缀运算符,所以不应该看起来像(4 $)?这不会编译,所以显然不会,这让我相信我并不真正理解发生了什么.这个(>3)术语对我来说很有意义,因为如果你提供类似的东西(\x -> x 4) (>3),你最终会得到相同的结果.
Lil*_*ard 19
($ 4)就是所谓的一个部分.这是部分应用中缀运算符的一种方式,但提供右侧而不是左侧.它完全等同于(flip ($) 4).
同样,(> 3)是一个部分.
($ 4) (> 3)
Run Code Online (Sandbox Code Playgroud)
可以改写为
(flip ($) 4) (> 3)
Run Code Online (Sandbox Code Playgroud)
这是一样的
flip ($) 4 (> 3)
Run Code Online (Sandbox Code Playgroud)
这是一样的
(> 3) $ 4
Run Code Online (Sandbox Code Playgroud)
在这一点上,应该清楚这归结为(4 > 3).
sha*_*ang 12
您可以从任何一方部分应用中缀运算符.对于交换运算符,例如+,如果你说(+ 1)或者无关紧要(1 +),但是例如对于除法,你可以提供被除数(5 /)或除数(/ 5).
函数应用程序运算符将函数作为左操作数,将参数作为右操作数(f $ x),因此可以使用函数(f $)或参数部分应用它($ x).所以给定
($ 4) (> 3)
Run Code Online (Sandbox Code Playgroud)
首先使用参数部分应用$ -operator 4并为其提供函数(> 3).所以这基本上变成了什么
(> 3) $ 4
Run Code Online (Sandbox Code Playgroud)
哪个是一样的(4 > 3).
($ 4)是一个函数,它接受一个函数并应用于4它.
(> 3) 是一个函数,它接受一个数字并检查它是否大于3.
因此,通过将后一个函数赋予前者,您基本上应用于4检查其输入是否大于的函数,3从而得到True.