我正试图在球拍中使用recurssion来减去数字列表。功能如下:
(define (sub lst)
(cond [(empty? lst) 0]
[ else (- (first lst) (sub (rest lst)))]))
这似乎不正确,因为球拍从左到右执行减法。即例如:
(- 1 2 3 4 6)
假设是-14。但是当我这样做时,就像通过递归给出列表一样,就像(list 1 2 3 4 6)
一样,结果为4.我怎样才能解决这个问题?
答案 0 :(得分:1)
所以你的功能是这样的:
(- (- 1 2) 3) ; ==> -4
你的功能需要做的是:
(sub '()) ; ==> 0 (identity of - is 0)
(sub '(1)) ; ==> -1 (- identity 1)
还有0和1参数的特殊情况:
{{1}}