List 在Scheme的列表中添加其他奇数元素时遇到问题

List 在Scheme的列表中添加其他奇数元素时遇到问题,list,scheme,racket,List,Scheme,Racket,我正在尝试添加列表中所有的奇数元素 我想不出是怎么回事。它将适用于所有赔率的列表,但如果存在一个偶数,则会导致错误。它表示它希望将一个数字作为第二个元素,但实际上传递了一个列表,这不应该发生 我的代码有什么问题 (define list-sum-odd (lambda (list) (cond ((null? list) 0) ((odd? (car list)) (+ (car list) (list-sum-odd (cdr l

我正在尝试添加列表中所有的奇数元素

我想不出是怎么回事。它将适用于所有赔率的列表,但如果存在一个偶数,则会导致错误。它表示它希望将一个数字作为第二个元素,但实际上传递了一个列表,这不应该发生

我的代码有什么问题

(define list-sum-odd
  (lambda (list)
    (cond
      ((null? list)
       0)
      ((odd? (car list))
       (+ (car list) (list-sum-odd (cdr list))))
      (list-sum-odd 
       (cdr list)))))

(单数和列表(cdr列表))
替换为
(其他(单数和列表(cdr列表)))
。按原样,您正在测试过程
list sum odd
是否为真(因为它不是#f,它是真的),然后返回
(cdr list)
。您需要告诉Scheme最后一个表达式应该是
else
表达式。

(list sum odd(cdr list))
替换为
(else(list sum odd(cdr list))
。按原样,您正在测试过程
list sum odd
是否为真(因为它不是#f,它是真的),然后返回
(cdr list)
。您需要告诉Scheme最后一个表达式应该是
else
表达式。

我已经编辑了代码的格式,以便问题和答案在单独的行中。就语言所知,
list sum odd
应该是问题的答案,而
(cdr list)
是答案。但我们知道,这不是OP想要的意图。Retief的答案适用。我已经编辑了代码的格式,以便问题和答案在单独的行中。就语言所知,
list sum odd
应该是问题的答案,而
(cdr list)
是答案。但我们知道,这不是OP想要的意图。雷蒂夫的答案适用。