下記ページの、かなり「大雑把」に、「私が興味を持ったところだけ」を「雰囲気」で翻訳したものです。これから何を学ぶのか?カモメの群れの例で考えるカモメの例で考えてみよう。群れが合流したら大きな群れができる(※こちらの群れと、相手の群れの足し算)繁殖をしたら、交配した数だけ増える(※こちらの群れの数と、相手の群れの数のかけ算)まずは、オブジェクト指向でコードを書くとこんな感じ。これは、現代の代入ベースのプログラムの組み方に危険性に焦点をあてるための例です。32意図としては、答えは16になってほしいのに、32になってしまっています。flcokAは、計算過程で値が変わってしまっているのが原因です。理解できなくても、それは全然問題ありません。私自身も理解できないので(笑)。覚えておいてほしいのは、「状態」と「変化する値」を追うのは、大変だということです。実際、今回のような簡単な例でも大変ですよね?関数型言語のアプローチで考えてみるでは、もう一度同じ問題をやってみましょう。今度は関数型言語のアプローチでやってみます。16今度は正しい値が計算できたでしょう?しかも、短いコードで。5でこの問題を解決します)。最初の例に比べれば、かなり良いプログラムになったけれど、さらにプログラムを改良できないか考えてみましょう。先ほどの関数がどういうものか考えてみると、これらの関数は、単に足し算(conjoin)、かけ算(breed)をしているだけです。それなら、これらの関数を、足し算は足し算、掛け算は掛け算と呼んだほうがいいのではないか?関数名を実態に合わせるこの2つの関数は、名前以外に特に変わっているところもないので、これらの関数をaddとmultiplyに変えて、名前を実体に合わせてみましょう。16上のように書きなおしたことで、次のような「昔の人の知恵」を利用することができます。z));数学の法則を使って、さらに簡単な式に書き換えるこれらの昔から知られている数学的な性質を利用していきましょう。これらの内容がわからなくても安心してください。ほとんどの人にとって、これらの算数の法則を学んでから、随分時間が経っているのですから。それでは、これらの性質を使って、先ほどのプログラムを簡単な形に直していきましょう。flockA));この関数呼び出しだけで充分だったのです。あとは、add関数とmultiply関数の定義を書き足しておけば、完全なものになります。実際には、これらの定義を各必要はありません。addとmultiplyは、既存のライブラリで提供されているはずです。このChapterのまとめひょっとしたら、「こんな数学っぽい例を全面に出されても意味がない」「実際のプログラムは、こんなに単純じゃないから、こんな方法では無意味だ」などと考えているかもしれません。この例を選んだのは、ほとんどの人が「足し算」と「掛け算」を理解しているからです。算数の知識がどれだけ利用価値が高いかが簡単に理解できだと思います。数学がわからないからといって悲観的になる必要もありません。この本の中では、圏論や集合論、ラムダ計算を使って、実世界ででてくる例を、プログラム化していきます。その結果は、さきほどのカモメの群れの例と同じように、綺麗・シンプルなプログラムができあがるでしょう。あなたは数学の学者になる必要もありません。この本で扱うことは、自然に・簡単に感じられるでしょう。それは、一般的なフレームワークやAPIを使うのとあまり変わりません。