2016-11-23 3 views
1

Je suis nouveau régime et ne pas utiliser actuellement (version Racket), donc je n'ai pas de telles fonctions intégrées comme un filtre et etc.éléments de rassemblement dans la gamme des valeurs Min et Max dans une liste dans le schéma

Mon tâche est maintenant d'obtenir des éléments de ma liste entrée et sortir de ce que ceux qui sont au-dessus de mon MinValue et en dessous de mon MaxValue

Dans ma variable « LST » par exemple j'ai (2 4 1 6 5 4 7 3)

Dans mon "MinValue" J'ai 2

Dans mon MaxValue je 5

Alors que maintenant, après je demande quelque chose de similaire comme

(remove (< # minVal) lst) 

Il devrait techniquement donner enlever et laissés:

(2 4 4 3) 

Mais je reçois l'erreur:

READ from #<INPUT CONCATENATED-STREAM #<INPUT STRING-INPUT-STREAM> #<IO TERMINAL-STREAM>>: objects printed as # in view of *PRINT-LEVEL* cannot be read back in 

questions principales:

Est-ce que le schéma a une variable spécifique définie comme # qui Itère la liste lors de supprimer/supprimer, si les fonctions sont utilisées, donc je peux l'utiliser?

est-il un moyen d'obtenir que cela fonctionne de telle manière:

(remove (< # minVal) lst) 

Merci!

tag

« devoirs » devrait être là, mais je ne peux pas créer encore

+0

Quel schéma utilisez-vous? Cela ressemble beaucoup à un message d'erreur Lisp. – molbdnilo

Répondre

0

Presque tout plan que je connaisse comprend une procédure filter, ce n'est pas spécifique à Racket, vous devriez pouvoir l'utiliser (remove n'est pas le bon outil pour ce travail).

Il suffit de passer un lambda qui reçoit chaque élément à son tour et vous pouvez définir une condition pour déterminer quels éléments vont dans la liste de sortie:

(filter (lambda (e) (and (>= e 2) (< e 5))) 
     '(2 4 1 6 5 4 7 3)) 

=> '(2 4 4 3) 

Il n'y a pas de variable # qui parcourt une liste et vous donne chaque élément à son tour, pour ce faire, vous devez parcourir explicitement la liste en utilisant la récursivité, ou utiliser l'une des procédures intégrées qui attendent une liste et un lambda - le paramètre lambda représente chacun des éléments.

Si pour une raison quelconque, vous n'êtes pas autorisé à utiliser filter, il est facile de le mettre en œuvre à partir de zéro, et remarquez encore une fois que nous ne avons pas besoin d'utiliser remove, et que pred est appelée à chacun des éléments:

(define (filter pred lst) 
    (cond ((null? lst) '()) 
     ((pred (car lst)) 
     (cons (car lst) (filter pred (cdr lst)))) 
     (else (filter pred (cdr lst))))) 
+1

Merci! Cela l'a expliqué! – Sparrow