Han*_*ans 2 haskell function addition
如何仅使用succ和制作乘法函数pred?
我已经拥有的添加功能:
plus :: Integer -> Integer -> Integer
plus a b | a == 0 = b
| otherwise = succ (pred a ´plus´ b)
Run Code Online (Sandbox Code Playgroud)
这种结构并不特别.你只需要理解乘法是x*y的基本逻辑是将x加到自身y次.
将x乘以0是0
将x乘以1是x
将x乘以N是将x乘以x乘以N-1.
假设性能不是问题,所以没有理由进行尾递归,一个简单的定义是:
mul :: Integer -> Integer -> Integer
mul x 0 = 0
mul 0 y = 0
mul x 1 = x
mul x n = x + mul x (n - 1) -- use plus instead of + if you were asked to
Run Code Online (Sandbox Code Playgroud)
这可以进一步压缩 - 我们实际上并不需要1个案例,或者双方都是零,因为加零只是零,乘以1是x +乘以零.
mul x 0 = 0
mul x y = x + mul x (n-1)
Run Code Online (Sandbox Code Playgroud)