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

Rob*_*bAu 3 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")
Run Code Online (Sandbox Code Playgroud)

取自:https://codegolf.stackexchange.com/questions/88/obfuscated-fizzbuzz-golf/110#110

C. *_*ann 8

以下是Haskell报告的相关部分:

Haskell提供了特殊的语法来支持中缀表示法.运算符是一个函数,可以使用中缀语法(第3.4节)应用,或部分应用于节(第3.5节).

运算符是运算符符号,例如+or $$,或者是包含在严重重音符(反引号)中的普通标识符,例如`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上查找内容的搜索引擎.


scl*_*clv 5

通常,我们可以foo像这样定义一个新函数:

foo a b c = (something involving a, b, and c)
Run Code Online (Sandbox Code Playgroud)

类似地,我们可以定义一个二元运算符%(由符号字符的任意组合构成),如下所示:

a % b = (something involving a and b)
Run Code Online (Sandbox Code Playgroud)