Haskell itérer sur une liste
Je sais que vous supposez à penser différemment en Haskell, mais quelqu'un peut me donner une réponse rapide sur la façon de parcourir une liste ou une liste imbriquée et imprimer un caractère sur la base de la valeur de l'élément de la liste.
list1 = [[1 0 0][0 1 0][0 0 1]]
Par itération dans cette liste imbriquée, il doit imprimer x 0 et y 1
yxx
xyx
xxy
Grâce
Plus généralement, en cas de déplacement à partir d'un langage impératif pour un langage fonctionnel, vous devriez probablement arrêter de penser "itérer sur une liste" et de penser davantage en termes de fonctions comme
map
et filter
.OriginalL'auteur nobody | 2011-09-27
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, je pense que tu veux dire:
Que pour ce que vous voulez:
Puis dans ghci:
OriginalL'auteur ivanm
Essayez ceci:
Si vous avez vraiment besoin de l'impression de résultat:
OriginalL'auteur franza
définir f par quelque chose comme
puis
est ce que vous voulez ou si vous le souhaitez amateur:
OriginalL'auteur Carsten
Vous pouvez remplacer
concat.intersperse
avecintercalate
et devrait remplacer l'foldl1 (>>)
avecfoldr (>>) (return ())
de sorte qu'il ne tombe pas en panne.sequence_
est encore plus beau.En outre, vous pouvez utiliser
mapM_
pour l'amener àmapM_.((>> putStrLn "").).mapM_ $ \c -> ...
. 🙂OriginalL'auteur Satvik
Les solutions à l'aide de
map
sont privilégiées Haskell style. Mais pendant que vous êtes en train d'apprendre, vous pouvez trouver de récursion explicite plus facile à suivre. Comme:map
fait à peu près la même chose, il applique une fonction à chaque élément d'une liste. Mais il peut être plus facile de voir ce qui se passe ici.OriginalL'auteur Zopa
Si vous êtes intéressé par l'arbitraire des listes imbriquées, alors vous pouvez écrire quelque chose comme ceci (un arbitraire de la liste imbriquée est essentiellement un arbre):
Avec que vous pouvez faire:
La fonction
traverse
prend un arbitraire de la liste imbriquée deInteger
s et renvoie un correspondant de la liste imbriquée deChar
s selon lesvalueOf
règle[a], [[a]], [[[a]]], [[[[a]]]], ...
Interdit par exemple.[[0,1],2,[[3],4]]
, l'arbre permet.vous avez raison
OriginalL'auteur MarcoS
Les solutions
OriginalL'auteur jmejia