argius note

プログラミング関連

整数に変換して階乗

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