【发布时间】:2016-12-12 10:06:09
【问题描述】:
我不太确定这个 ZInt 实际描述的是什么。
data Nat = Zero | S Nat
data ZInt = Z Nat Nat deriving Show
addZ :: ZInt -> ZInt -> ZInt
addZ (Z a b) (Z c d) = Z (add a c) (add b d)
with
add :: Nat -> Nat -> Nat
add a Zero = a
add a (S b) = S (add a b)
mult :: Nat -> Nat -> Nat
mult _ Zero = Zero
mult a (S b) = add a (mult a b)
乍一看,我认为这可能是复数的表示,添加虚部和实部(在函数 addZ 中)而不显示形式
a+b*i
但是在这个函数中发生了什么?
subZ :: ZInt -> ZInt -> ZInt
subZ (Z a b) (Z c d) = Z (add a d) (add b c)
multZ :: ZInt -> ZInt -> ZInt
multZ (Z a b) (Z c d) = Z (add (mult a d) (mult c b)) (add (mult a c) (mult b d))
所以我确实理解数据 Nat = 零 | S Nat 以及 add 和 mult 函数,但不是 addZ、subZ 和 multZ。
【问题讨论】:
标签: haskell data-structures functional-programming algebraic-data-types