7
votes

Haskell - Comment scinder un numéro dans une liste pour un traitement ultérieur?

J'ai un INT que je veux séparer ses numéros individuels qui seraient idéalement contenus dans une liste, que je peux alors traiter plus loin. Je voudrais donc quelque chose comme ceci: xxx

est-ce que quelqu'un est familier avec une telle fonction?


0 commentaires

5 Réponses :


22
votes
import Data.Char

map digitToInt $ show 245

2 commentaires

Oui, si vous voulez utiliser cette approche ... Veillez simplement à passer des chiffres non négatifs uniquement. Sinon, vous passeriez un '-' à digitoint , qui est une erreur. Incidemment, la réponse cool de John Boker a une question funkier avec des chiffres négatifs ... Vérifiez-le. :-)


Oui, l'idée de base est que vous utilisez "show" pour convertir 245 sur une chaîne, une liste de caractères. Ensuite, vous mappez Digitoint sur cette liste de caractères et vous obtenez des chiffres à la place des caractères, vous disposez donc de la liste de chiffres.



4
votes

L'exemple aurait-il lieu ici pour vous? http://snippets.dzone.com/posts/show/5961

> convRadix 10 1234
[4, 3, 2, 1]
> convRadix 10 0
[]
> convRadix 10 (-1)
[9,9,...] (infinite)

to convert haskell radix by mokehehe on Thu Aug 21 08:11:39 -0400 2008


1 commentaires

Je l'écrirais plus comme Convradix b = moudr MMODDIV où MMODDIV 0 = MZERO; mmoddiv n = let (q, r) = n `divmod` b en retour (R, q) (divisé entre les lignes, que je ne peux pas faire dans un commentaire) mais c'est vraiment tout de même :)



1
votes
digits   1234  == [1, 2, 3, 4]
digits (-1234) == [1, 2, 3, 4]

1 commentaires

Ou chiffres = fst. diriger . filtre ((==) 0. SND). queue . itérer (\ (d, n) -> laisser (q, r) = n `divmod` 10 in (r: d, q)). (,) []. ABS ;-)



2
votes
digits :: Int -> [Int]
digits 0 = []
digits n = digits k ++ [r]
    where k = div n 10; r = mod n 10

1 commentaires

Veuillez éditer votre réponse et mettre quatre espaces au début de chaque ligne, il sera donc formaté comme code.



1
votes
digits = reverse . map (`mod` 10) . takeWhile (> 0) . iterate (`div` 10) . abs

0 commentaires