Carte, Filtre, Dossier dans DrRacket / Scheme
Langage de programmation: Régime/DrRacket
Nous sommes actuellement plus de map
filter
et foldr
dans mon ordi sci de la classe. Je comprends que tous les trois peuvent être utilisés pour créer résumé des fonctions, mais je suis honnêtement un peu confus au sujet de la différence entre les trois, et quand je l'avais utiliser.
Quelqu'un soin d'expliquer ce que chacun est et comment ils sont différents? Malheureusement, mon livre n'est pas très clair.
source d'informationauteur Lukas Pleva
Vous devez vous connecter pour publier un commentaire.
L'idée de base est que tous les trois sont des manières d'appliquer une fonction à tous les éléments d'une liste.
Carte est peut-être le plus simple--vous, il suffit d'appliquer la fonction à chaque élément de la liste. C'est essentiellement la même qu'une boucle for-each dans d'autres langues:
Essentiellement, la carte est comme ceci:
(map f '(1 2 3))
est le même que(list (f 1) (f 2) (f 3))
.Filtre est aussi simple: la fonction agit comme un arbitre, de décider de garder chaque numéro. Imaginez un vraiment pointilleux mangeur de passer par un menu et pleurnicher sur les choses qu'il ne mangera pas 😉
Pli est le plus difficile à comprendre, je pense. Plus intuitive que le nom serait "accumuler". L'idée est que vous êtes en "combinant" la liste comme vous allez le long. Il y a quelques fonctions en plus les jours, qui sont en fait des plis--somme est un parfait exemple.
Vous pouvez penser à la fois que la prise de la fonction et de la mettre entre chaque élément de la liste:
(foldr + 0 '(1 2 3))
est le même que1 + 2 + 3 + 0
.Pli est spécial parce que, contrairement aux deux autres, il renvoie généralement une valeur scalaire, quelque chose qui a été l'élément de la liste plutôt que la liste elle-même. (Ce n'est pas toujours vrai, mais pensez-y de cette façon pour l'instant de toute façon.)
Noter que j'ai peut-être pas obtenu tous les détails du code parfaite, je n'ai jamais utilisé un autre, plus ancien de la mise en œuvre de Régime j'ai perdu un peu de Raquette de détails.
Je peux recommander ces exercices de doigté (et le texte qui vient avant):
http://htdp.org/2003-09-26/Book/curriculum-Z-H-27.html#node_idx_1464