将整数转换为没有'mod'和'div'的数字列表

Dav*_*504 2 haskell

我目前在下面有Haskell函数,它将整数转换为从原始整数中取得的数字列表.我的问题是:有没有办法在不使用mod和的情况下做到这一点div?例如,如果我想用字符串做同样的事情,我可以创建一个利用其他功能的功能,如头部和尾部等.

我在这个问题上挣扎了一段时间才终于来到SO并在另一篇文章中找到答案.是什么让我问这个问题的事实是我从来没有想过使用moddiv我自己!

toDigits :: Integer -> [Integer]
toDigits n 
 | n < 1 = []
 | otherwise = toDigits (n `div` 10) ++ [n `mod` 10]
Run Code Online (Sandbox Code Playgroud)

ick*_*fay 8

你提到过你可以对带有列表操作的字符串做同样的事情.实际上,这将是另一种方式.您可以将整数转换为字符串,然后将每个字符转换为整数:

import Data.Char (digitToInt)

toDigits :: Int -> [Int]
toDigits = map digitToInt . show
Run Code Online (Sandbox Code Playgroud)

在这里我使用Int而不是Integer,但你可以使用,Integer如果你真的想要更多的麻烦:

toDigits :: Integer -> [Integer]
toDigits = map (fromIntegral . digitToInt) . show
Run Code Online (Sandbox Code Playgroud)