Possible en double:
Split a number into its digits with Haskellint -> [entier] convertir
Comment convertir entier à l'entier liste Exmple: entrée: sortie 1234: [1,2,3 , 4] aucune idée sur ce problème?
Possible en double:
Split a number into its digits with Haskellint -> [entier] convertir
Comment convertir entier à l'entier liste Exmple: entrée: sortie 1234: [1,2,3 , 4] aucune idée sur ce problème?
Solution:
digs 0 = [] digs x = digs (x `div` 10) ++ [x `mod` 10]
Source: link
Cela ressemble à des devoirs. Voici un algorithme général que vous devriez pouvoir appliquer dans Haskell:
Bonne chance.
+1 pour résister à l'appel de représentant et mentionnant le * devoirs * mot;) –
entier en utilisant l'arithmétique:
digits' 0 = []
digits' n = n `rem` 10 : digits (n `quot` 10)
digits n = reverse (digits' n)
Seul problème est que 'digits 0' vous donne une liste vide, mais c'est trivial à corriger. Aussi ne fonctionne pas pour les nombres négatifs, mais ce n'est pas clair quelle est la bonne réponse dans ce cas –
@Chris: Cela fonctionne pour les nombres négatifs. 'digits (-42)' retourne '[-4, -2]' ce qui me semble raisonnable. – sepp2k
solution Alternatative utilisant unfoldr:
import List
digits = reverse . unfoldr nextDigit
where nextDigit 0 = Nothing
nextDigit x = Just (r, q) where (q, r) = quotRem x 10
jleedev:
je l'ai fait quelque chose de similaire avec DIVMOD. Je ne savais pas que quotRem existait!
import Data.List (unfoldr)
listify :: Integer -> [Integer]
listify = reverse . unfoldr f
where
f i = case divMod i 10 of
(0, 0) -> Nothing
(w, r) -> Just (r, w)
Qu'en est-il de cette solution assez simple?
import Data.Char (digitToInt)
int2intList :: Integral i => i -> [Int]
int2intList s = map digitToInt $ show s
main = print $ int2intList 12351234999123123123
donne [1,2,3,5,1,2,3,4,9,9,9,1,2,3,1,2,3,1,2,3]
Celui-ci est possible et un peu plus universel aussi:
int2intList :: (Read i, Integral i) => i -> [i]
int2intList s = map (read.(:[])) $ show s
main = print $ int2intList 12351234999123123123
Je vous remercie beaucoup c'était le code dont j'avais besoin. et merci pour les autres réponses. à votre santé – marco