2012-02-24 59 views
1

我想计划成员函数,不知道我的定义的

(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))) 
))) 

如果有人能告诉我什么是错我的会员功能,我将不胜感激。

回答

3

((null?list)#t)

如果列表为空,则返回true。这是错误的。

+0

谢谢你,那工程:) – marcwho 2012-03-15 16:32:40

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)))))) 

请注意,如果你想要的(任意嵌套)列出的清单内搜索,递归是更复杂一点:你必须要考虑列表为空的情况,列表不是列表而是单个元素的情况,并且您必须在列表的car和cdr部分上重复发生。

例如,上述定义将为列表,如这方面的工作:

(member? 'x '((a b) (c (x)))) 
> #t