Function 编程*仅使用succ和pred

Function 编程*仅使用succ和pred,function,haskell,addition,Function,Haskell,Addition,如何仅使用succ和pred生成乘法函数 我已有的添加功能: plus :: Integer -> Integer -> Integer plus a b | a == 0 = b | otherwise = succ (pred a ´plus´ b) 这种结构并不特别。你只需要理解乘法是什么的基本逻辑,x*y就是把x加上y次 x乘以0等于0 x乘以1等于x 将x乘以N等于将x与x乘以N-1相加 假设性能不是问题,因此没有理由采用尾部递归,简单的定义是:

如何仅使用
succ
pred
生成乘法函数

我已有的添加功能:

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

这种结构并不特别。你只需要理解乘法是什么的基本逻辑,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的情况,或者两边都需要零的情况,因为加零就是零,乘以1就是x+乘以零

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

plus::Integer->Integer->Integer
加上a 0=a
加上a b=加上(成功a)(前b)

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

mult::Integer->Integer->Integer
mult a 0=0
多个a b=加上a(多个a(前b))

这将增加b倍