Recursion Scheme中的递归乘法(负数问题)

Recursion Scheme中的递归乘法(负数问题),recursion,functional-programming,scheme,racket,Recursion,Functional Programming,Scheme,Racket,我尝试使用递归在Scheme中进行乘法,我可以使用正数而不是负数(它们被困在一个无限循环中)。我假设问题出现在第三行和第四行,我写这两行是为了能够处理负片。任何帮助都将不胜感激:) 因为乘法是关联的,所以可以 x * (-1 * y) = (x * -1) * y 记住这一点,只要y小于零,就可以将x和y乘以-1将其转换为正。 考虑以下几点: (define (multiply x y) (cond ((zero? x) 0) ((zero? y) 0) ((&

我尝试使用递归在Scheme中进行乘法,我可以使用正数而不是负数(它们被困在一个无限循环中)。我假设问题出现在第三行和第四行,我写这两行是为了能够处理负片。任何帮助都将不胜感激:)


因为乘法是关联的,所以可以

x * (-1 * y)  =  (x * -1) * y
记住这一点,只要
y
小于零,就可以将
x
y
乘以
-1
将其转换为正。 考虑以下几点:

(define (multiply x y)
  (cond
    ((zero? x) 0)
    ((zero? y) 0)
    ((< y 0)
     (multiply (- x) (- y)))
    (else
     (+ x (multiply x (sub1 y))))))
(定义(乘以x y)
(续)
((零?x)0)
((零?y)0)
(
(define (multiply x y)
  (cond
    ((zero? x) 0)
    ((zero? y) 0)
    ((< y 0)
     (multiply (- x) (- y)))
    (else
     (+ x (multiply x (sub1 y))))))