Scheme 在方案中添加嵌套列表的总和

Scheme 在方案中添加嵌套列表的总和,scheme,racket,nested-lists,Scheme,Racket,Nested Lists,我正在使用这个方案。我在查找某个列表的和时没有问题,但是当一个列表中有一个列表或嵌套列表时,我在添加和时遇到了很大的困难 (define (my-summation li) (if (null? li) 0 ((if (list? (car li)) (my-summation (car li)) (+ (car li) (my-summation (cdr li))))))) 这是我的输入,这是错误的结果。Scheme是我的弱点,因为它涉及递归,但我似乎找不到问题所在 >

我正在使用这个方案。我在查找某个列表的和时没有问题,但是当一个列表中有一个列表或嵌套列表时,我在添加和时遇到了很大的困难

(define (my-summation li)
(if (null? li)
  0
  ((if (list? (car li)) (my-summation (car li))
  (+ (car li) (my-summation (cdr li)))))))
这是我的输入,这是错误的结果。Scheme是我的弱点,因为它涉及递归,但我似乎找不到问题所在

> (my-summation '(6 3 -2 5 '(4 2 -3) 4 )) 
function call: expected a function after the open parenthesis, but received -3

在括号中,在
if
周围有一个额外的集合。此外,当列表位于引用列表中时,您不需要引用该列表。而且
(list?(car li))
案例不正确,它应该将元素和列表的其余部分相加

(define (my-summation li)
  (if (null? li)
      0
      (if (list? (car li))
          (+ (my-summation (car li)) (my-summation (cdr li)))
          (+ (car li) (my-summation (cdr li))))))

(my-summation '(6 3 -2 5 (4 2 -3) 4))

结果为19个

可供选择的解决方案:

(define (sum-list xs)
  (define (loop sum-so-far xs)
    (cond
      [(null? xs)        sum-so-far]                              ; no-more-elements
      [(pair? (car xs))  (loop (+ sum-so-far (sum-list (car xs))) ; the first element is a sublist
                               (cdr xs))]                         ;   so sum-list computes its sum 
      [else              (loop (+ sum-so-far (car xs))            ; the first element is a number
                               (cdr xs))]))                        ;  so it is added directly
  (loop 0 xs))

(sum-list '(6 3 -2 5 (4 2 -3) 4)) ; note: no quote in the middle

; ==> 19

我没注意到。抱歉,但不知怎么的,它没有读取括号后的最后一位数字。不知道为什么。我还做错了什么吗?谢谢你的替代解决方案,但是我的代码有什么问题吗?我希望我能得到一些批评。@user3255372没什么错——更多的是品味问题。我发现嵌套的if很难阅读。
cond
表达式表明您有三种情况。请注意
'(63-25'(42-3)4)
是列表
(63-25(引号(42-3))4)
。您不需要嵌套您的引用。您可能想要列表
”(63-25(42-3)4)