(define (remover lst n)
(cond ((null? lst) ())
((eq? (car lst) n) (cdr lst))
(else (cons (car lst) (remover (cdr lst) n)))))
(remover 'f '(a f c g f b))
此代码生成以下错误。
car:期待类型的论点;鉴于f
答案 0 :(得分:1)
您似乎使用交换参数调用remover
。如果你这样称呼它:
(remover '(a f c g f b) 'f)
您将获得结果(a c g f b)
。
由于您要删除f
的所有匹配项,因此您还必须将(cdr lst)
更改为(remover (cdr lst) n)
,如下所示:
(define (remover lst n)
(cond ((null? lst) ())
((eq? (car lst) n) (remover (cdr lst) n))
(else (cons (car lst) (remover (cdr lst) n)))))
然后(remover '(a f c g f b) 'f)
也应该产生预期结果(a c g b)
。
要让remover
的参数切换,你必须在定义和两个递归调用中切换它们,如下所示:
(define (remover n lst)
(cond ((null? lst) ())
((eq? (car lst) n) (remover n (cdr lst)))
(else (cons (car lst) (remover n (cdr lst))))))