运算符%在Haskell中意味着什么?

时间:2013-01-31 20:17:19

标签: haskell operators

我想知道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

2 个答案:

答案 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)