理想未来ってなんやねん

娘可愛い。お父さん頑張る。

Haskell 12日目

Haskell 12日目。

日刊じゃなくて週刊Haskellになってきた。

関数定義

関数定義の例

square n = n * n

引数を1つとる関数squareの定義で、『square n』の値を『n * n』と定義します。

関数の定義は束縛の一種でもあり、上記の例では引数の2乗するという関数に変数squareが束縛されます。
関数定義をこのような観点から見て、関数束縛(function binding)と呼ぶことがあります。


パターンマッチを利用して関数を定義することもできる。(過去に出てきたので割愛)

識別子の規則

Haskellで関数や変数の名前に使える文字は次のいずれかとなる。

  • アルファベットの小文字と大文字(a〜z、A〜Z)
  • 数字(0〜9)
  • アンダースコア(_)
  • シングルクオート(')

関数名や変数名に使う識別子は、1文字目がアルファベットの小文字か『_』アンダースコアでなければいけない。
アンダースコアはHaskellの仕様書では1文字目の使用は避けるべきとされている。

識別子にシングルクオートが使える事にも注意する。

尚、Haskell予約語は識別子として使用できない。
Haskell予約語は下記の通り。

case	class	data	default	deriving	do
else	if	import	in	infix	infixl	inflxr	instance
let	module	newtype	of	then	type	where	-
二項演算子の定義

Haskellでは、二項演算子のように使える関数が定義できる。
定義するには次のように書く。

パターン1 演算子 パターン2 = 定義

この形式でも、通常形式の関数定義と同じく、引数には値のパターンを記述できる。

『||』演算子の定義例

(||) :: Bool -> Bool -> Bool
True || _ = True
False || x = x
二項演算子の規則

使える文字は次の通り。

!	#	$	%	&	*	+
.	/	<	=	>	?	@
\	^	|	-	~

他にUnicodeに含まれる記号が使える。

次の演算子は言語で予約されており、独自に定義できない。

..	:	::	=	\	|
<-	->	@	~	=>
前置形式と二項演算子の変換

識別子を使って関数を定義した場合でも、関数名を『` `』で囲むと二項演算子として使用できる
また、関数名を定義する際に『` `』で囲む事で二項演算子であるかのように定義できる。

パターン1 `関数名` パターン2 = 定義

逆に、二項演算子を括弧で囲うと通常の前置形式の関数として使用できる。



今日のところはここまで。