编程*仅使用succ和pred

时间:2015-04-26 15:18:25

标签: function haskell addition

如何仅使用succpred制作乘法函数?

我已经拥有的添加功能:

plus :: Integer -> Integer -> Integer
plus a b | a == 0    = b
         | otherwise = succ (pred a ´plus´ b)

2 个答案:

答案 0 :(得分:5)

这种结构很难特殊。你只需要理解乘法是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

这可以进一步压缩 - 我们不需要 需要1个案例,或者双方为0,因为添加零只是零,乘以1是x +乘以零。

mul x 0 = 0
mul x y = x + mul x (n-1)

答案 1 :(得分:0)

plus :: Integer -> Integer -> Integer plus a 0 = a plus a b = plus (succ a) (pred b)

a转到a + b-> b转到零

mult :: Integer -> Integer -> Integer mult a 0 = 0 mult a b = plus a (mult a (pred b))

这会增加b次。