这有什么错,在我的计划“名单和”代码?

问题描述 投票:1回答:1

我else语句行是给我的错误。是我的任何影响其他表达式代码的其他行的?

(define (sumAdd list)
  (cond
    ((null? list) '())
    ((null? (cdr list)) list)
    ((symbol? list) sumAdd(cdr list))
    (else (+ (car list)(sumAdd (cdr list))))
    )
  )
scheme
1个回答
2
投票

如果我理解正确的话,你想在混合元素类型列表总结所有的数字。如果是这样的话,也有你的代码的几个误区:

(define (sumAdd list)                 ; `list` clashes with built-in procedure
  (cond
    ((null? list) '())                ; base case must be zero for addition
    ((null? (cdr list)) list)         ; why discard the last element?
    ((symbol? list) sumAdd(cdr list)) ; that's not how procedures are called
    (else (+ (car list) (sumAdd (cdr list)))))) ; this line is fine :)

这是贯彻落实过程的正确方法:

(define (sumAdd lst)
  (cond
    ((null? lst) 0)                           ; base case is zero
    ((symbol? (car lst)) (sumAdd (cdr lst)))  ; skip current element
    (else (+ (car lst) (sumAdd (cdr lst)))))) ; add current element

它按预期工作:

(sumAdd '(1 a 2 b 3 c))
=> 6
© www.soinside.com 2019 - 2024. All rights reserved.