Régime: Supprimer dupliqué numéros de la liste
J'ai écrit ce code pour créer une liste de fr nombre d'arguments donnés
(define (create-list . e)
e)
Mais j'en ai besoin pour supprimer un duplicata de numéros de la liste à l'intérieur de ce bloc lui-même.
J'ai essayé et cherché pendant des heures et ne peut pas trouver une solution sans passer des dizaines de lignes de code sur d'autres blocs.
Par exemple, disons que mon entrée est
(create-list . 2 2 3 5 5 )
J'ai besoin de la liste créée, '(2 3 5) et de ne pas '(2 2 3 5 5 )...
L'ordre des nombres n'a pas d'importance.
Voir aussi stackoverflow.com/a/8651932/450148
OriginalL'auteur spacing | 2011-12-05
Vous devez vous connecter pour publier un commentaire.
Fondamentalement, vous avez besoin de faire quelque chose comme:
Je ne peux penser à une, très simple, mais probablement inefficace façon de le faire:
Si vous ne pouvez pas utiliser les fonctions comme
filter
, vous pouvez faire un vous-même:Oui. En fait,
head
ettail
sont déjà justecar
etcdr
respectivement (trop de Haskell sur mon esprit).Notez également que ma syntaxe peut être un peu hors-j'ai seulement été en utilisant des Haskell beaucoup récemment et je n'ai jamais utilisé stk, qui est une ancienne interpréteur scheme.
Désolé, je n'étais pas habitué à cela. Viens de vérifier le fichier de réponse. Merci!!!!
En général,
filter
prend une liste et d'un prédicat (une fonction qui renvoie true ou false), et renvoie une liste contenant uniquement les éléments pour lesquels le prédicat retourné véritable. Vous pouvez penser que c'est unselect-where
.OriginalL'auteur Tikhon Jelvis
Celui-ci est plus rapide:
Mais encore mieux,
mit-un dispositif de supprimer les doublons, qui fait exactement ce que vous voulez.
OriginalL'auteur abo-abo
Le plus efficace (en parcourant la liste une fois) pour ce faire consiste à définir une fonction qui va par le biais de la liste élément par élément. La fonction stocke une liste dont les éléments sont déjà dans les de-dupe de la liste.
Un avantage de cette solution sur @Tikhon Jelvis, c'est que les éléments de la liste n'ont pas besoin d'être dans l'ordre, pour être dédupliquées.
Donné une fonction
elem
, qui dit que sia
est un élément del
:Nous pouvons parcourir la liste, le stockage de chaque élément que nous n'avons pas vu avant:
Remarque: pour plus d'efficacité, il renvoie les éléments dans l'ordre inverse
Jelvis: Il a regardé comme ça; je ne peux pas le faire revenir valeurs propres, cependant. Exemple: "(créer une liste de 3 5 4 3 4 6) le terme" revenus "(3 3)"
Ce n'était pas à cause de l'ordre, c'est parce que j'ai laissé par mégarde un pas dans le filtre du prédicat. J'ai corrigé maintenant.
OriginalL'auteur amindfv
OriginalL'auteur Icorisa