2010-10-21 11 views

Répondre

6

Solution:

digs 0 = [] 
digs x = digs (x `div` 10) ++ [x `mod` 10] 

Source: link

+0

Je vous remercie beaucoup c'était le code dont j'avais besoin. et merci pour les autres réponses. à votre santé – marco

9

Cela ressemble à des devoirs. Voici un algorithme général que vous devriez pouvoir appliquer dans Haskell:

  1. Convertit l'entier en une chaîne.
  2. Effectue une itération sur la chaîne caractère par caractère.
  3. Convertissez chaque caractère en nombre entier, tout en l'ajoutant à la fin d'une liste.

Bonne chance.

+2

+1 pour résister à l'appel de représentant et mentionnant le * devoirs * mot;) –

4

entier en utilisant l'arithmétique:

digits' 0 = [] 
digits' n = n `rem` 10 : digits (n `quot` 10) 
digits n = reverse (digits' n) 
+0

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 –

+0

@Chris: Cela fonctionne pour les nombres négatifs. 'digits (-42)' retourne '[-4, -2]' ce qui me semble raisonnable. – sepp2k

1

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 
0

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) 
3

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 
Questions connexes