0
data Nat = Zero | Succ Nat
deriving (Eq, Show)
-- Add two Natural number
addNat :: Nat -> Nat -> Nat
addNat Zero Zero = Zero
addNat Zero [email protected](Succ _) = n
addNat [email protected](Succ _) Zero = n
addNat (Succ x) (Succ y) = Succ (Succ (addNat x y))
我對Haskell函數中的@運算符感到迷惑。Haskell @運算符混淆
我想知道addNat Zero [email protected](Succ _) = n
是什麼意思?
是不是表示addNat Zero Succ b = Succ b
?
所以,它相當於'addNat(Succ n)Zero = Succ n'? – wrek
@wrek儘管GHC和其他編譯器可能會做一些與該代碼稍有不同的東西,但它在語義上是等效的。具體來說,使用'addNat n(Succ _)Zero = n',GHC將不會分配新的'Nat',而對於'addNat(Succ n)Zero = Succ n',GHC可能(特別是在低優化級別)破壞第一個參數,並構建一個與舊的意義相同的* new *'Nat'。 –