今日はHaskelのメモ書き。
一回触ったことがあったんですが大してやることもなく放置し続けた結果、忘れきってしまったのでメモ書きでも残しておこうと思います。
まず、関数の書き方。次のように書きます。
関数名::第1引数の型->第2引数の型->…->関数の型 関数名 引数 = 式
例として、整数の足し算をする関数を作ってみます。
Add::Int->Int->Int Add x y = x+y
次にパターンマッチングを使って関数の定義をしてみます。たとえば階乗の計算をするとき
Factorial::Int->Int Factorial 0 = 1 Factroial x = (Factorial x-1) * x
とすれば良い気がします。しかし、Intでは正負のどちらの整数も取れるので、引数に負の整数が渡されるとプログラムが終了しなくなります。
そこで、負の数のときは1を返すようにしてみたいと思います。
ここで、パターンマッチングを使ってみます。すると次のように書くことができます。
fact :: Int -> Int fact x | x<=0 = 1 | otherwise = x * fact (x - 1)
今のままではコマンドライン引数をとるプログラムが書けないので、コマンドライン引数をとるプログラムを書いてみます。
module Main where -- このモジュールの名前 import System import Plelude main = do args <- getArgs print (fact (strToInt (head args))) where strToInt :: String -> Int strToInt str = (read :: String -> Int) str fact :: Int -> Int fact x | x<=0 = 1 | otherwise = x * fact (x - 1)
ここで、GHCを使ってコンパイルします。ファイル名は"fact.hs"にします。
ghc -o fact.exe fact.hs fact 5 120
となります。
とりあえず、今回はここまで。