我想知道Haskell运算符%的作用。在谷歌很难找到,我也无法在Haskell报告中找到它。
我在这段代码中看到了它:
fi=zz.bu
bu=zz.(:).(++"zz")
[]#zz=zz;zz#__=zz
zZ%zz=zZ zz$zZ%zz
zz=(([[],[]]++).)
zZ=zipWith;z=zZ((#).show)[1..]$zZ(++)(bu%"Fi")(fi%"Bu")
取自:https://codegolf.stackexchange.com/questions/88/obfuscated-fizzbuzz-golf/110#110
答案 0 :(得分:8)
以下是Haskell报告的the relevant section:
Haskell提供特殊语法来支持中缀表示法。运算符是一个可以使用中缀语法(第3.4节)应用的函数,或者使用部分(第3.5节)部分应用的函数。
运算符可以是运算符符号,例如
+
或$$
,也可以是包含在严重重音符(反引号)中的普通标识符,例如`op`。例如,可以编写中缀应用程序op x y
,而不是编写前缀应用程序x `op` y
。如果没有为`op`
给出固定性声明,那么它默认为最高优先级和左关联性(参见第4.4.2节)。通过将操作符号括在括号中,可以将其转换为普通标识符。例如,
(+) x y
相当于x + y
,而foldr (*) 1 xs
相当于foldr (\x y -> x * y) 1 xs
。
也就是说,除了语法之外,Haskell中的“运算符”没有什么特别之处。名称由符号组成的函数默认为infix,名称为字母数字的函数默认为prefix,并且可以在其他样式中使用一些额外语法。
顺便说一句,由于通常无法使用Google进行基于运营商名称的搜索,因此要查找标准库中声明的运算符,Hackage上有两个search engines专门用于finding things。
答案 1 :(得分:5)
通常,我们可以像这样定义一个新函数foo
:
foo a b c = (something involving a, b, and c)
同样,我们可以定义一个二元运算符%
(由符号字符的任意组合构成),如下所示:
a % b = (something involving a and b)