Scheme:在列表和子列表中搜索元素
问题描述:
我想写一个接收列表并返回每个元素列表的函数。 例如: GET - (x 3 4 5 (x 4) 3 x (6)))
和接收:Scheme:在列表和子列表中搜索元素
(lookForX '(x 3 4 5 (x 4) 3 x (6)))
-> (x x)
我在做什么错:为(x (x) x())
(define (lookForX lst)
(cond
((null? lst) '())
((eq? (car lst) 'x) (cons (car lst) (lookForX (cdr lst))))
(else (lookForX (cdr lst)))))
我的代码的结果?
答
在你工作,你只是在寻找x
为列表元素,你是不是做子列表:
(define (filter-x lst)
(cond
((null? lst) '())
((eq? (car lst) 'x)
(cons (car lst)
(filter-x (cdr lst))))
((pair? (car lst))
(cons (filter-x (car lst))
(filter-x (cdr lst))))
(else (filter-x (cdr lst)))))
(filter-x '(x 3 4 5 (x 4) 3 x (6)))
; ==> (x (x) x())
通知我改名这更像口齿不清。 Lisp代码通常不使用camelCase,而是使用lisp-case。你可以做得更一般:
(define (filter-tree predicate? lst)
(cond
((null? lst) '())
((predicate? (car lst))
(cons (car lst)
(filter-tree predicate? (cdr lst))))
((pair? (car lst))
(cons (filter-tree predicate? (car lst))
(filter-tree predicate? (cdr lst))))
(else (filter-tree predicate? (cdr lst)))))
(define (filter-tree-x lst)
(filter-tree (lambda (v) (eq? v 'x)) lst))
(filter-tree-x '(x 3 4 5 (x 4) 3 x (6)))
; ==> (x (x) x())
(define (filter-tree-numbers lst)
(filter-tree number? lst))
(filter-tree-numbers '(x 3 4 5 (x 4) 3 x (6)))
; ==> (3 4 5 (4) 3 (6))
谢谢!它帮助! – user2953423