整数に変換して階乗
今度は実行時引数が2桁以上でも実行できるように、文字列を整数に変換する関数を定義しました。
階乗の関数は、パターンマッチでなくガードでやっています。
import System
import Char
atoi :: [Char] -> Int
atoi [c] = digitToInt c
atoi (c:cs) = atoi [c] * 10 ^ length cs + atoi cs
fact n
| n < 1 = 1
| otherwise = n * fact (n - 1)
main = do cs <- getArgs
print $ fact $ atoi $ head cs今の環境だと、ガードのところのインデントがTabになってしまうのですが、お手本に合わせて4にしています。
追記:haskell-modeの設定に誤りがあっただけでした。今は上手くいっています。