整数に変換して階乗
今度は実行時引数が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の設定に誤りがあっただけでした。今は上手くいっています。