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: est-ce que quelqu'un est familier avec une telle fonction? P> p>
5 Réponses :
import Data.Char map digitToInt $ show 245
Oui, si vous voulez utiliser cette approche ... Veillez simplement à passer des chiffres non négatifs uniquement. Sinon, vous passeriez un '-' code> à
digitoint code>, 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.
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
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) code> (divisé entre les lignes, que je ne peux pas faire dans un commentaire) mais c'est vraiment tout de même :)
digits 1234 == [1, 2, 3, 4] digits (-1234) == [1, 2, 3, 4]
Ou chiffres = fst. diriger . filtre ((==) 0. SND). queue . itérer (\ (d, n) -> laisser (q, r) = n `divmod` 10 in (r: d, q)). (,) []. ABS code> ;-)
digits :: Int -> [Int] digits 0 = [] digits n = digits k ++ [r] where k = div n 10; r = mod n 10
Veuillez éditer votre réponse et mettre quatre espaces au début de chaque ligne, il sera donc formaté comme code.
digits = reverse . map (`mod` 10) . takeWhile (> 0) . iterate (`div` 10) . abs