一个函数,它将获取一个项目和一个列表,并返回一个布尔值,表明该项目是否在列表或任何子列表中找到。
(define is-present?
(lambda (item lis)
(if (null? lis) #f
(if (eqv? item (car lis))
#t
(is-present? (item (cdr lis)))))))
我能够在普通列表中搜索元素,但是当列表中有子列表时,它会失败。
答案 0 :(得分:0)
如果您遇到子列表,则需要递归此子列表。
(define search
(lambda (item lst)
(cond ((null? lst)
#f)
((pair? (car lst))
(or (search item (car lst))
(search item (cdr lst))))
(else
(or (eqv? item (car lst))
(search item (cdr lst)))))))
答案 1 :(得分:0)
请尝试以下方法:
(define (present? item list)
(cond ((or (not (list? list)) (null? list)) #f)
((let ((x (car list))) (or (eqv? item x) (present? item x))) #t)
(else (present? item (cdr list)))))
这就是我们正在做的事情:
list
是否实际上是一个列表。如果它不是列表,那么我们返回#f
。list
是否为空。如果它为空,则返回#f
。car
的{{1}}是否为list
。如果是,那么我们返回item
。#t
的{{1}}是否包含car
。如果是,则返回list
。item
#t
是否包含cdr
。 list
函数会检查item
是present?
的成员还是item
的子列表:
list
希望这有帮助。
答案 2 :(得分:0)
如果car
的{{1}}本身就是一个列表,则需要采取特殊措施。您的代码缺少对该条件的检查。试试这个:
lis
答案 3 :(得分:0)
埃!那是我的功课问题。
这是我的答案:
(define present
(lambda (x list)
(cond ((or (not (list? list)) (null? list)) #f)
((or (eqv? x (car list)) (present x (car list))) #t)
(else (present x (cdr list))))))