2016-09-17 49 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

相關問題