我想要
(member? 'a '((d d) (d d)))
返回false
我做错了什么
(define (member? x list)
(cond
((null? list) #t )
(else ( or (or (eq? (car (car list)) x) (eq? (cdr (car list)) x)) (member? x (cdr list) ))
)))
如果有人能告诉我我的会员功能有什么问题,我会非常感激。
答案 0 :(得分:3)
((null?list)#t)
如果列表为空,则返回true。那是错的。
答案 1 :(得分:2)
试试这个,这是一个更通用的解决方案:
(define (member? ele lst)
(cond ((null? lst) #f)
((not (list? lst))
(equal? ele lst))
(else (or (member? ele (car lst))
(member? ele (cdr lst))))))
请注意,如果要在(任意嵌套的)列表列表中进行搜索,则递归会更复杂一些:当列表为空时,列表不是列表而是列表时,您必须考虑这种情况单个元素,你必须重复列表中的汽车和cdr部分。
例如,上述定义适用于以下列表:
(member? 'x '((a b) (c (x))))
> #t