我有一个诠释,我想分裂成它的个人数字,理想情况下将包含在一个列表中,然后我可以进一步处理。所以我想这样的事情:Haskell - 如何将数字拆分为列表以供进一步处理?
split 245
--will then get an list containing [2,4,5]
有人熟悉这样的功能?
我有一个诠释,我想分裂成它的个人数字,理想情况下将包含在一个列表中,然后我可以进一步处理。所以我想这样的事情:Haskell - 如何将数字拆分为列表以供进一步处理?
split 245
--will then get an list containing [2,4,5]
有人熟悉这样的功能?
import Data.Char
map digitToInt $ show 245
这里的例子适合你吗? 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
我会更像'convRadix b = unfoldr mModDiv其中mModDiv 0 = mzero; mModDiv n = let(q,r)= n \'divMod \'b作为回报(r,q)'(在线条上分割,我在评论中无法做到)但它们都是一样的:) – ephemient 2010-01-14 05:01:20
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]
或'digits = fst。头。过滤器((==)0。snd)。尾巴 。迭代(\(d,n) - > let(q,r)= n \'divMod \'10 in(r:d,q))。 (,)[]。 abs' ;-) – ephemient 2010-01-14 21:06:52
digits :: Int -> [Int]
digits 0 = []
digits n = digits k ++ [r]
where k = div n 10; r = mod n 10
请编辑您的答案,并在每行的开头放置四个空格,以便将其格式化为代码。 – Yitz 2010-11-06 20:07:29
digits = reverse . map (`mod` 10) . takeWhile (> 0) . iterate (`div` 10) . abs
很好的例子..! – jspcal 2010-01-14 04:27:13
所以我将digitToInt绑定到一个数字的显示命令上? – RCIX 2010-01-14 04:30:39
是的,如果你想使用这种方法......只要注意只传递非负数。否则,你会传递'-''到'digitToInt',这是一个错误。顺便说一句,约翰·博克的冷静的答案有一个负数的乐趣问题...检查出来。 :-) – 2010-01-14 04:43:36