2010-11-15 25 views
0

Je souhaite créer un sous-ensemble de ma liste en fonction de ses valeurs. Par exemple:Lire et recréer une liste en fonction de ses valeurs

List (AA AB BA DC AD) 

Je veux une liste qui a toutes les valeurs des atomes dans ce à partir de « A » Alors réponse devrait être:

(AA AB AD) 

Je peux faire cela actuellement en traversant à travers l'ensemble lister et convertir chaque valeur en une autre liste et lire la première valeur, puis recréer la liste.

C'est une solution terriblement complexe.

Y at-il une méthode dans Scheme qui peut lire le premier caractère de la chaîne dans une liste et supprimer l'élément?

Répondre

5

Vérifiez si votre implémentation de schéma a une procédure appelée filter ou quelque chose comme ça. Sinon, vous pouvez définir un vous-même:

(define (filter p lst) 
    (let loop ((lst lst) (res())) 
    (if (null? lst) 
     (reverse res) 
     (if (p (car lst)) 
      (loop (cdr lst) (cons (car lst) res)) 
      (loop (cdr lst) res))))) 

filtre utilisant pour obtenir tous les atomes qui commencent par « A »:

> (filter (lambda (x) (char=? (string-ref (symbol->string x) 0) #\A)) 
      '(AA AB BA DC AD)) 
=> (AA AB AD) 
+0

cool !!! merci :) essayait logique similaire, mais a fini encore plus confuse quand je suis tombé sur des erreurs laides: P – JJunior