data Nat = Zero | Succ Nat
deriving (Eq, Show)
-- Add two Natural number
addNat :: Nat -> Nat -> Nat
addNat Zero Zero = Zero
addNat Zero n@(Succ _) = n
addNat n@(Succ _) Zero = n
addNat (Succ x) (Succ y) = Succ (Succ (addNat x y))
我对Haskell函数中的@运算符感到困惑。
我想知道addNat Zero n@(Succ _) = n
的含义是什么?
这是否意味着addNat Zero Succ b = Succ b
?
答案 0 :(得分:2)
如果name
是变量名,而pat
是模式,则name@pat
是一种与pat
完全匹配的模式,并且还绑定{{1}匹配name
的值。所以:
pat
说"如果第一个参数是addNat n@(Succ _) Zero = n
而第二个参数是Succ
,则返回第一个参数"。