在haskell中,我可以看到很多素数,就像' chainl1'
这是什么意思? expr = term `chainl1` addop
term = factor `chainl1` mulop
factor = parens expr <|> integer
mulop = do{ symbol "*"; return (*) }
<|> do{ symbol "/"; return (div) }
addop = do{ symbol "+"; return (+) }
<|> do{ symbol "-"; return (-) }
答案 0 :(得分:15)
素数('
)被视为变量名中的任何数字,即除非它在开头你可以像字母一样使用它。因此,foldl'
等名称;通常那些会引用类似事物的某种“替代”,在这种情况下foldl
除了惰性评估之外是等价的。
但是,您的示例中实际上没有任何素数。那些是反引号。使用反引号在函数周围可以像使用中缀运算符一样使用它,例如
plus :: Int -> Int -> Int
plus = (+)
前奏&GT; 4`plus` 5
9
答案 1 :(得分:6)
二进制函数f
通常作为f x y
应用于2个参数。但是,有一些二进制函数(如elem
),有理由看到它们是中缀而不是后缀。要将二进制函数移动到中缀表示法,请将其包含在反引号(`
)中。比较
intersect set1 set2 = [x | x <- set1, elem x set2]
与
intersect set1 set2 = [x | x<- set1, x `elem` set2]
第二个更接近数学符号。
另见the corresponding learn you a Haskell chapter
PS:您可以为运营商做相反的事情。通常运算符是中缀(2 + 3
),但您可以通过将其括在parens((+) 2 3
)