乘法等于重复加法?
Multiplication as repeated addition?
我是 Scheme 新手。我正在尝试编写一个将(整数)乘法定义为重复加法的程序。在 python 中,程序看起来像这样:
a = int(raw_input(['please enter a number to be multiplied']))
b = int(raw_input(['please enter a number to multiply by']))
y = a
print y
for i in range(b-1):
y+=a
print y
我在尝试用 Scheme 编写时遇到了两个问题,一个 'hard' 和一个 'soft':
- 'hard' 问题:我在 Scheme 中找不到与范围函数等效的函数。我应该如何实施?
- 'soft'问题:书中此时还没有为Scheme引入for循环,这让我相信解决方案不包含for循环;但是,如果是 easier/better.
,我可以使用 for 循环
您使用递归代替迭代。大意是:
mult(a, b)
if b == 0, return 0
return a + mult(a, b-1)
现在,你能自己在 Scheme 中编写代码吗?
在Racket(一种Scheme衍生品)中有"named let"可以在每个循环中连续添加b次(更容易理解这个概念):
(let loop ((n 0)
(s 0))
(cond
([= n b] s)
(else (loop (add1 n) (+ s a)))))
我是 Scheme 新手。我正在尝试编写一个将(整数)乘法定义为重复加法的程序。在 python 中,程序看起来像这样:
a = int(raw_input(['please enter a number to be multiplied']))
b = int(raw_input(['please enter a number to multiply by']))
y = a
print y
for i in range(b-1):
y+=a
print y
我在尝试用 Scheme 编写时遇到了两个问题,一个 'hard' 和一个 'soft':
- 'hard' 问题:我在 Scheme 中找不到与范围函数等效的函数。我应该如何实施?
- 'soft'问题:书中此时还没有为Scheme引入for循环,这让我相信解决方案不包含for循环;但是,如果是 easier/better. ,我可以使用 for 循环
您使用递归代替迭代。大意是:
mult(a, b)
if b == 0, return 0
return a + mult(a, b-1)
现在,你能自己在 Scheme 中编写代码吗?
在Racket(一种Scheme衍生品)中有"named let"可以在每个循环中连续添加b次(更容易理解这个概念):
(let loop ((n 0)
(s 0))
(cond
([= n b] s)
(else (loop (add1 n) (+ s a)))))