2010-01-14 9 views
7

मेरे पास एक इंट है कि मैं अपनी व्यक्तिगत संख्याओं में विभाजित करना चाहता हूं जो आदर्श रूप से एक सूची में निहित होंगे, जिसे मैं आगे संसाधित कर सकता हूं। तो मुझे ऐसा कुछ चाहिए:हास्केल - आगे की प्रक्रिया के लिए किसी संख्या को सूची में कैसे विभाजित करें?

split 245 
--will then get an list containing [2,4,5] 

क्या कोई इस तरह के फ़ंक्शन से परिचित है?

उत्तर

22
import Data.Char 

map digitToInt $ show 245 
+0

अच्छा उदाहरण ..! – jspcal

+0

तो मैं अंक की एक शो कमांड पर digitToInt पट्टा? – RCIX

+0

हां, यदि आप इस दृष्टिकोण का उपयोग करना चाहते हैं ... केवल गैर-संख्यात्मक संख्याओं में प्रवेश करने के लिए सावधानी बरतें। अन्यथा आप ''' 'को' digit'oInt' 'से गुज़रेंगे, जो एक त्रुटि है। संयोग से, जॉन बोकर के अच्छे जवाब में नकारात्मक संख्याओं के साथ एक मजेदार मुद्दा है ... इसे देखें। :-) –

4

क्या उदाहरण यहां आपके लिए काम करेगा? 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)) 

उदाहरण:

> 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

मैं इसे 'convRadix b = unfoldr mModDiv जैसे अधिक लिखूंगा जहां mModDiv 0 = mzero; mModDiv n = चलो (क्यू, आर) = एन \ 'divMod \' बी बदले में (आर, क्यू) '(लाइनों में विभाजित, जो मैं एक टिप्पणी में नहीं कर सकता) लेकिन यह वास्तव में वही है :) – 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

या 'अंक = एफएसटी। सिर । फ़िल्टर ((==) 0 एसएनडी)। पूंछ iterate (\ (डी, एन) -> चलो (क्यू, आर) = एन \ 'divMod \' 10 में (आर: डी, ​​क्यू))। (,) []। abs' ;-) – ephemient

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

कृपया अपना उत्तर संपादित करें और प्रत्येक पंक्ति की शुरुआत में चार रिक्त स्थान डालें, इसलिए इसे कोड के रूप में स्वरूपित किया जाएगा। – Yitz

1
digits = reverse . map (`mod` 10) . takeWhile (> 0) . iterate (`div` 10) . abs 
संबंधित मुद्दे