2011-02-22 9 views
0
(define filter-in 
    (lambda (predicate list) 
    (let((f 
     (lambda (l) 
      (filter-in-sexpr predicate l)))) 
    (map f list)))) 

(define filter-in-aux 
    (lambda (pred lst) 
    (if (null? lst) '() 
     (cons (filter-in-sexpr pred (car lst)) 
       (filter-in-aux pred (cdr lst)))))) 

(define filter-in-sexpr 
    (lambda (pred sexpr) 
    (if (equal? (pred sexpr) #t) 
      sexpr 
      '()))) 

(필터 번호가? '(a 2 (1 3) b 7)은 (() 2()() 7)을 생성합니다.스키마 목록에서 null 요소 제거

(2 7)의 최종 결과를 얻기 위해 생성 된 목록에서 null 요소를 건너 뛸 수 있습니까?

답변

1

문제는 filter-in-sxpr을 목록에 매핑하는 것이 문제입니다. 다른 필터 패스를 실행하여 null을 제거하거나 다음과 같이 수정 된 filter-in-aux를 사용할 수 있습니다.

(define filter-in-aux 
    (lambda (pred lst) 
    (if (null? lst) '() 
     (let ((h (filter-in-sexpr pred (car lst))) 
       (t (filter-in-aux pred (cdr lst)))) 
      (if (null? h) t 
       (cons h t))))))