我有一個關於haskell在分離字符串數字的最後一個數字的問題。例如,輸入是(1234),輸出是(123,4) 我已經完成了一個編程,但它不起作用。Haskell關於如何將最後一個數字與字符串數字分開
toDigits :: Int -> [Int]
toDigits n
| n <= 0 = []
| otherwise = toDigits(n `mod` 10) ++ [n `div` 10]
我有一個關於haskell在分離字符串數字的最後一個數字的問題。例如,輸入是(1234),輸出是(123,4) 我已經完成了一個編程,但它不起作用。Haskell關於如何將最後一個數字與字符串數字分開
toDigits :: Int -> [Int]
toDigits n
| n <= 0 = []
| otherwise = toDigits(n `mod` 10) ++ [n `div` 10]
你只需要div
和mod
交換。
toDigits n | n <= 0 = []
| otherwise = toDigits (n `div` 10) ++ [n `mod` 10]
修正了他的功能,但他的請求似乎是要求'f :: Int - >(Int,Int)',也許'f x =(x \'div \'10,x \'mod \'10)'。 –
可能,雖然這是一個非常無聊的問題:'f x = divMod x 10'。 – chepner
通常我們編寫的代碼在第一次嘗試時不起作用(或編譯)。有用的事情是:在ghci中測試你的代碼的短小部分(並用':t'來詢問它們的類型),用筆和紙跟蹤你的函數的執行,用'-Wall'編譯。在你的情況下,我會建議筆和紙的方法。你也許想'toDigits :: Int - > Maybe(Int,Int)' – jberryman
你的遞歸/終止被破壞了,所以再次考慮一下算法。以數字「1」爲例。 'mod 1 10 == 1',所以你將無限地調用'toDigits',因爲你永遠不會達到零。 –
@jberryman爲什麼不'Int - >(Int,Int)'?給定這個算法,我無法描繪出一個'Int'值,我將它映射到'Nothing'。 – chepner