检查列表或子列表中的项目

时间:2013-10-17 20:09:23

标签: list scheme

我想使用check函数来检查项目是在列表中还是在子列表中。 但这个错误让我很困惑。有人能告诉我我的代码有什么问题吗?

(define check
 (lambda(item lis)
  (cond((null? lis) #f)
       (else(if(pair? (car lis)) 
               (if(check item (car lis)) #t (check item (cdr lis))) 
               (if(equal? item (car list)) #t (check item (cdr lis))))))))


> (check 'a '(a b))
. . car: contract violation
  expected: pair?
  given: #<procedure:list>

1 个答案:

答案 0 :(得分:2)

你在这里有一个错字:

(equal? item (car list))

应该是:

(equal? item (car lis))

请注意,list是一个过程,代码中的参数称为lis