2016-09-17 47 views
-2

我有一个关于haskell在分离字符串数字的最后一个数字的问题。例如,输入是(1234),输出是(123,4) 我已经完成了一个编程,但它不起作用。Haskell关于如何将最后一个数字与字符串数字分开

toDigits :: Int -> [Int] 
toDigits n 
| n <= 0  = [] 
| otherwise  = toDigits(n `mod` 10) ++ [n `div` 10] 
+0

通常我们编写的代码在第一次尝试时不起作用(或编译)。有用的事情是:在ghci中测试你的代码的短小部分(并用':t'来询问它们的类型),用笔和纸跟踪你的函数的执行,用'-Wall'编译。在你的情况下,我会建议笔和纸的方法。你也许想'toDigits :: Int - > Maybe(Int,Int)' – jberryman

+0

你的递归/终止被破坏了,所以再次考虑一下算法。以数字“1”为例。 'mod 1 10 == 1',所以你将无限地调用'toDigits',因为你永远不会达到零。 –

+0

@jberryman为什么不'Int - >(Int,Int)'?给定这个算法,我无法描绘出一个'Int'值,我将它映射到'Nothing'。 – chepner

回答

1

你只需要divmod交换。

toDigits n | n <= 0 = [] 
      | otherwise = toDigits (n `div` 10) ++ [n `mod` 10] 
+0

修正了他的功能,但他的请求似乎是要求'f :: Int - >(Int,Int)',也许'f x =(x \'div \'10,x \'mod \'10)'。 –

+1

可能,虽然这是一个非常无聊的问题:'f x = divMod x 10'。 – chepner

相关问题