2011-02-22 2 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 
      '()))) 

L'appel (numéro de filtre? '(A 2 (1 3) b 7)) produit (() 2()() 7). Comment puis-je ignorer les éléments NULL de la liste générée pour obtenir le résultat final de (2 7)?Suppression d'éléments NULL de la liste de schémas

Répondre

1

Le problème est que vous mappez filter-in-sxpr sur la liste. Vous pouvez exécuter un autre filtre pour supprimer les valeurs NULL ou utiliser un filtre-in-aux modifié comme suit:

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