2010-01-14 13 views

Respuesta

22
import Data.Char 

map digitToInt $ show 245 
+0

buen ejemplo ..! – jspcal

+0

entonces conecto digitToInt a un comando show de un número? – RCIX

+0

Sí, si desea utilizar este enfoque ... Solo tenga cuidado de pasar solo números no negativos. De lo contrario, estarías pasando un ''-'' a' digitToInt', que es un error. Incidentalmente, la genial respuesta de John Boker tiene un problema más funky con los números negativos ... échale un vistazo. :-) –

4

¿El ejemplo aquí funciona para usted? http://snippets.dzone.com/posts/show/5961

convRadix :: (Integral b) => b -> b -> [b] 
convRadix n = unfoldr (\b -> if b == 0 then Nothing else Just (b `mod` n, b `div` n)) 

ejemplo:

> 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 
+0

Lo escribiría más como 'convRadix b = unfoldr mModDiv donde mModDiv 0 = mzero; mModDiv n = let (q, r) = n \ 'divMod \' b a cambio (r, q) '(dividido entre líneas, lo cual no puedo hacer en un comentario) pero es realmente todo lo mismo :) – ephemient

1
digits :: (Integral a) => a -> [a] 
digits = flip digits' [] . abs 

digits' :: (Integral a) => a -> ([a] -> [a]) 
digits' n = if q == 0 
    then (r :) 
    else (digits q ++) . (r :) 
    where 
    (q, r) = n `divMod` 10 

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

O 'digits = fst. cabeza. filter ((==) 0. snd). cola. iterar (\ (d, n) -> let (q, r) = n \ 'divMod \' 10 in (r: d, q)). (,) []. abs' ;-) – ephemient

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

Por favor, edite su respuesta y ponga cuatro espacios al comienzo de cada línea, por lo que se formateará como código. – Yitz

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