2016-09-17 8 views
-2

文字列番号の最後の数字とは別にhaskellに関する質問があります。たとえば、入力は(1234)、出力は(123,4) 私はプログラミングを行っていますが、動作しません。ハスケル最後の数字を文字列番号から分ける方法について

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)'ではないのですか?私は、このアルゴリズムが与えられれば 'Nothing'にマップされる' Int'値を描くことはできません。 – 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

関連する問題