如何要求用户给予一个7位数的数字,并定义一个函数将这些数字转换成一个单独的整数列表。示例:
toDigits (1234567) = [1, 2, 3, 4, 5, 6, 7]
toDigitsReverse 1234567 = [7, 6, 5, 4, 3, 2, 1]
NB.(1234567)应由用户输入。
我知道如何提示用户和函数将其放入数组中,但不知道如何将它们放在一起。这就是我目前得到的结果--将它们分开的函数。
toDigits :: Integral x => x -> [x]
toDigits 0 = []
toDigits x = toDigits (x div 10) ++ [x mod 10]
main :: IO ()
main = do
putStr "The split array is "
print(toDigits 1234567)
如何让todigit
函数接受输入?
我还尝试了以下操作,但它给出了错误
toDigits :: Integer -> [Int]
toDigits n = map (\x -> read [x] :: Int) (show n)
main :: IO ()
main = do
putStrLn "Please enter the USI number: "
usi <- getLine
let usiasnumber = read usi :: Int
print("The USI split into single digit array is " ++ toDigits usiasnumber)
我这样做了,但它不起作用。我哪里出错了?这是它给我的错误
无法将类型“Int”与“Char”匹配。预期类型:[Char]实际类型:[整数]
1条答案
按热度按时间yftpprvb1#
从用户那里得到一个数字的通常方法是从用户那里得到一个字符串,然后把它转换成一个数字。从那里转换成数字和转换回字符串是一样的。因此,我建议你跳过中间的步骤,直接从字符串转换成数字列表。如果你想把数字反转并打印出来,那么,就这样做吧:
如果您要将数字用于其他用途,您可能希望它们是数字形式而不是字符形式;
digitToInt
将为您完成此操作。