List 球拍中数字列表的减法

List 球拍中数字列表的减法,list,racket,subtraction,List,Racket,Subtraction,我正试图在racket中使用递归来简化一个数字列表。功能如下所示: (define (sub lst) (cond [(empty? lst) 0] [ else (- (first lst) (sub (rest lst)))])) 这似乎不正确,因为球拍从左到右执行减法。例如: (-12346)假定为-14。但是当我用递归的方法在列表中给出结果时,比如(列表1 2 3 4 6)它给出的结果是4。我如何解决这个问题呢?因此,您的函数执行以下操作: (sub '(1 2 3))

我正试图在racket中使用递归来简化一个数字列表。功能如下所示:

(define (sub lst)
 (cond [(empty? lst) 0]
       [ else (- (first lst) (sub (rest lst)))]))
这似乎不正确,因为球拍从左到右执行减法。例如:


(-12346)
假定为-14。但是当我用递归的方法在列表中给出结果时,比如
(列表1 2 3 4 6)
它给出的结果是4。我如何解决这个问题呢?

因此,您的函数执行以下操作:

(sub '(1 2 3))      ; ==
(- 1 (- 2 (- 3 0))) ; ==
(- 1 (- 2 3))       ; ==
(- 1 -1)            ; ==
; ==> 2
您的职能部门需要做的是:

(- (- 1 2) 3)  ; ==> -4
0和1参数也有特殊情况:

(sub '())  ; ==> 0  (identity of - is 0)
(sub '(1)) ; ==> -1 (- identity 1)

@用户3607109是的。操作需要从左到右进行,而不是像您那样从右到左进行。