我无法理解为什么这些会有所不同。:
Prelude> :t ((<) 3)
((<) 3) :: (Num a, Ord a) => a -> Bool
Prelude> ((<) 3) 2
False
Prelude>
Prelude> :t (< 3)
(< 3) :: (Num a, Ord a) => a -> Bool
Prelude> (< 3) 2
True
Prelude>
我怀疑这是一个直截了当的答案,但我甚至不知道用什么词来描述第一和第二个案例之间的区别。我很乐意编辑我的问题,一旦有人告诉我这种情况是什么,就使用正确的命名法。
答案 0 :(得分:9)
(<) 3
将3
应用为<
的第一个(左)参数。因此(<) 3 2
与3 < 2
相同。
(< 3)
是一个section,它将3
作为<
的右操作数。这是可以与二进制中缀运算符一起使用的特殊语法。因此(< 3) 2
与2 < 3
相同。
要将3
作为左操作数应用于一个部分,您可以编写:(3 <)
。因此(3 <) 2
与3 < 2
相同。
使用lambdas进行演示:(< 3)
与\x -> x < 3
相同,(3 <)
与\x -> 3 < x
相同。