[英]Using the addition function over the natural numbers, give a recursive definition of multiplication of natural numbers?
我进行以下练习,但是不确定如何开始。 这种措辞对我来说没有意义:
在自然数上使用加法函数,给出自然数乘法的递归定义。
您可以将3 * 5
视为5 + 5 + 5
,即将3
加5
。 如果要递归执行,则可以这样考虑: a * b
的结果等于将b
添加到(a-1) * b
的结果中。 从这里到Haskell递归函数,步骤很小:)
mul(n,1) = n
mul(n,m) = mul(n,m-1) + n
这样的事情
一种定义是:
mul m n = sum $ replicate m n
在这里, replicate ab
创建一个包含b的副本的列表,例如,复制3 5 = [5,5,5]。 sum
给出列表的总和,例如sum [5,5,5]
为15。
当然,使用内置函数会带来欺骗,那么您如何自己编写这些函数呢? 我会给你一些提示:
replicate' 0 x = []
replicate' n x = x : ???
sum' [] = 0
sum' (x:xs) = ???
通常,寻找预定义的功能(例如使用Hoogle)以解决一般问题,并逐个替换该功能是一种不错的作业策略。 这有助于将问题划分为可管理的步骤,并为您免费介绍Haskell API。
i,j的乘积只不过是将i,j乘以。 这是Java代码,但是您可以从中获取逻辑。
public int mul(int i, int j) {
if(j==1) return i;
return i + mul(i, j-1);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.