Scheme 与球拍有关的问题

Scheme 与球拍有关的问题,scheme,racket,Scheme,Racket,在右边的注释中,是一些为乘法算法提供的伪代码。左边是我在实数代码中实现上述算法的尝试,以两个二进制数字列表作为参数(从左到右,而不是从右到左)。我在运行它时遇到了一个错误,它的意思是“过程应用程序:预期的过程,给定:0;参数为:0”。其中的其他函数可以完全独立工作 有人能给我一个正确的提示或提示吗?这是(cons0c),而不是(cons0c)):-)即便如此,cons在这里也是错误的方法。:-) 我是这样翻译的: (define (mult a b) ;;

在右边的注释中,是一些为乘法算法提供的伪代码。左边是我在实数代码中实现上述算法的尝试,以两个二进制数字列表作为参数(从左到右,而不是从右到左)。我在运行它时遇到了一个错误,它的意思是“过程应用程序:预期的过程,给定:0;参数为:0”。其中的其他函数可以完全独立工作

有人能给我一个正确的提示或提示吗?

这是
(cons0c)
,而不是
(cons0c))
:-)即便如此,
cons
在这里也是错误的方法。:-)

我是这样翻译的:

 (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
减少直译可以使代码更具可读性:

(define (mult a b)
  (if (zero? b) 0
      (let ((c (mult a (quotient b 2))))
        (if (even? b)
            (* 2 c)
            (+ a (* 2 c))))))

二进制数字版!(例如,其中4表示为
”(01)


(您必须实现
add
才能进行二进制数字加法。)

谢谢您的回复。我忘了提到,函数不接受两个整数作为输入,而是两个二进制数字列表(从左到右,与正常的从右到左相反)。我道歉,因为这是一个相当大的细节。之所以使用Cons,是因为根据我的理解,在列表的前面加一个零,本质上就是将列表乘以2。享受吧!(尚未测试)非常感谢您的帮助;我能让它工作。正如您所指出的,我的主要问题是函数调用不正确
(define (mult a b)
  (if (zero? b) 0
      (let ((c (mult a (quotient b 2))))
        (if (even? b)
            (+ c c)
            (+ a c c)))))
(define (mult a b)
  (if (null? b) '()
      (let ((c (mult a (cdr b))))
        (if (zero? (car b))
            (cons 0 c)
            (add a (cons 0 c))))))