递归函数不工作'“程序汽车中的错误类型参数”

时间:2016-03-03 14:47:00

标签: recursion scheme lisp cdr sisc

我正在编写一个递归函数,它接受一个元素A和一个列表L并返回一个等于L的列表,但每次出现的A都被删除了。这是我写的:

(define (remove A L)
    (cond   ( (eq? A (car L))       (remove A (cdr L)) )
            ( (not(eq? A (car L)))  (cons (car L) (remove A (cdr L))) )
            ( (null? L)             '() )
    )
)

编译并运行时,我收到以下错误:

/tmp/compile/5c6515d8-e155-11e5-9605-aa00009baa05/input/main.scheme:2:21: In procedure remove:

/tmp/compile/5c6515d8-e155-11e5-9605-aa00009baa05/input/main.scheme:2:21: In procedure car: Wrong type argument in position 1 (expecting pair): ()

1 个答案:

答案 0 :(得分:1)

我明白了:

首次检查功能(null? L)carcdr不能在任何空列表中使用。

(define (remove A L)
    (cond   ( (null? L)             '() )
            ( (equal? A (car L))       (remove A (cdr L)) )
            ( (not(equal? A (car L)))  (cons (car L) (remove A (cdr L))) )
    )
)