What is it, naokirin?

Haskellのメモ

今日は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

となります。

とりあえず、今回はここまで。