在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 (-) }
Run Code Online (Sandbox Code Playgroud)
lef*_*out 15
prime(')被视为变量名中的任何数字,即除非它在开头你可以像字母一样使用它.因此名称如foldl'; 通常那些会引用类似事物的某种"替代",在这种情况下foldl除了懒惰的评价之外是等价的.
但是,您的示例中实际上没有任何素数.这些都是反击.使用反引号围绕一个函数可以让你像中缀操作符一样使用它,例如
plus :: Int -> Int -> Int
plus = (+)
Run Code Online (Sandbox Code Playgroud)
前奏> 4`plus` 5
9
二进制函数f通常应用于2个参数f x y.但是,有一些二进制函数(例如elem),有理由看到它们是中缀而不是后缀.要将二进制函数移动到中缀符号,请将其括在反引号(`)中.相比
intersect set1 set2 = [x | x <- set1, elem x set2]
Run Code Online (Sandbox Code Playgroud)
同
intersect set1 set2 = [x | x<- set1, x `elem` set2]
Run Code Online (Sandbox Code Playgroud)
第二个更接近数学符号.
另请参阅相应的了解Haskell章节
PS:您可以为运营商做相反的事情.通常运算符是infix(2 + 3)但是你可以通过将它括在parens((+) 2 3)中来将它移动到前缀