let循环返回意外结果

时间:2014-02-09 19:39:34

标签: scheme

任何人都可以告诉我

的结果
(remove (list 1 2 3) 1)

其中remove

定义
(define (remove ls x)
(let loop((ls0 ls) (ls1 '()))
 (if (null? ls0)
     (reverse ls1)
     (let ((ls2 (if (eqv? x (car ls0))
                    ls1
                    (cons (car ls0) ls1))))
       loop (cdr ls0) ls2))))

()而不是(2 3)

1 个答案:

答案 0 :(得分:2)

您的递归调用错误,请将其替换为

(loop (cdr ls0) ls2))))