什么是素数在haskell?

时间:2014-04-04 21:51:29

标签: haskell

在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 (-) }

2 个答案:

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

中将其移动到前缀