0
(define (mult a b) ;;function mult(a,b)
(cond
((IsItZero? b) 0) ;;if b = 0: return 0
((let((c (mult a (rest b)))) ;;c = mult(a, floor(b/2))
(if (= (first b) 0) ;;if b is even
(cons (0 c)) ;;return 2c else:
(addTogether(a cons(0 c)))))))) ;;return a + 2c
在右边的注释中,给出了乘法算法的一些伪代码。左边是我试图在实际代码中实现所述算法,以两个二进制数字列表作为参数(从左到右,而不是从右到左)。运行时遇到一个错误,该错误说明了“procedure application:expected procedure”中的某些内容,给定为0;参数为:0。在工作中看到的其他功能是完全独立的。与球拍有关的问题
任何人都可以提供一个提示或在正确的方向微调?
感谢您的答复。我忘了提及这个函数并不需要两个整数作为输入,而是两个二进制数字列表(从左到右,而不是从右到左)。我很抱歉,因为这是一个非常大的细节。 使用缺点是因为从我的理解中,在列表的前面添加一个零就会使列表乘以两。 –
哇。好吧,我们来看看.... :-) –
好的,我添加了一个二进制数字版本。请享用! (尚未测试) –