2010-01-14 6 views

risposta

22
import Data.Char 

map digitToInt $ show 245 
+0

bell'esempio ..! – jspcal

+0

così lego digitToInt su un comando show di un numero? – RCIX

+0

Sì, se si desidera utilizzare questo approccio ... Basta fare attenzione a passare solo numeri non negativi. Altrimenti passeresti un '' -'' a 'digitToInt', che è un errore. Per inciso, la bella risposta di John Boker ha un problema più funky con numeri negativi ... dai un'occhiata. :-) –

4

l'esempio qui funziona per voi? 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)) 

esempio:

> 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 scriverei più come 'convRadix b = unfoldr mModDiv dove mModDiv 0 = mzero; mModDiv n = let (q, r) = n \ 'divMod \' b in ritorno (r, q) '(diviso tra le righe, cosa che non posso fare in un commento) ma è davvero tutto lo stesso :) – 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

Oppure 'digit = fst. capo . filtro ((==) 0. snd). coda . iterate (\ (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

Modifica la tua risposta e inserisci quattro spazi all'inizio di ogni riga, quindi verrà formattato come codice. – Yitz

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