7. 2.関数プログラミング
? Haskellで利用されている「関数」は、プログラミング言語でいう
ところの関数ではなく、数学的な意味合いでの関数に相当する。
? 関数型言語では、高レベルな What (目的は何か)を記述する
手続型言語では、低レベルな How (目的をどのように達成
するか)を記述する。
※手続き型言語の思考法に慣れたプログラマにとっては、移行が難しいと感じるケースが多い。
? Haskellでは、再代入(破壊的代入)は許されない
例 a = a + 1 (再代入できることを副作用という)
※値の状態が変更されない制約があるため、堅牢性が高くバグも減らせる。
? プログラムの各部分の実行順序を任意に選ぶことができるため
並列演算への応用が容易である。
8. 2.関数プログラミング 例
1から5までの数を足し合わせる計算(Java)
total = 0; Haskellでは、
Haskellでは、
for (i = 1; i <= 5; ++i) 値の再代入
はできない
total = total+i;
※計算の基本は蓄えられている値を変えること
1から5までの数を足し合わせる計算(Haskell)
sum [1..5]
※計算の基本は関数を引数に適用すること
9. 2.関数プログラミング 補足1
例 お茶を頼む場合
手続型言語 How 関数型言語 What
お湯を沸かして お茶をお願い
↓
急須を用意して
↓
お茶の葉を入れて
↓
???
手順ではなく「何をしてほしいか」を記述する。