関数型言語とピタゴラスイッチって似てる!
プログラミングHaskell 、読んでます。
ひと通り内容をさらったので、今は牛歩でじっくりと精読しながら、実際にプログラムを書くなどしております。
パーサーの部分とか対話プログラムの部分とかがむつかしいと感じる今日この頃です。
なにがいいたい
関数プログラミングの発想・理念は- 関数は引数を与えられて、それに応じた結果を返す
- 関数はパーツである
- パーツである関数の組み合わせによってプログラムを構築する
- 関数は実際に使う時まで評価されない(遅延評価)
これってすごくピタゴラスイッチじゃん! とふと思ったので。
たとえば
関数は引数を与えられて、それに応じた結果を返す
ピタゴラスイッチで言うと、「ビー玉」が入力で「ドミノ」が出力になると言えるでしょう。「ビー玉」が激突する事により、「ドミノ」が倒れる、という結果が得られる一連の流れは関数的ではないでしょうか。
関数はパーツである
ピタゴラスイッチで言うところの、一つ一つの仕事を為す仕組みたちです。それはビー玉がぶつかる事によってドミノが倒れる仕組みだったり、
おもりの付いた振り子が揺れてぶつかる事によって台車が走りだす仕組みだったりするでしょう。
パーツである関数の組み合わせによってプログラムを構築する
上記のような、一つではあまり意味のないパーツたちを組み合わせて、最終目標(例えば「旗を揚げる」だとか)を達成するのがピタゴラスイッチ。
一つではあまり嬉しくない関数(パーツ)、例えばリストの先頭要素を取り除く関数なんかを
組み合わせて最終的な出力を得るのが関数プログラミング。
関数は実際に使う時まで評価されない(遅延評価)
ピタゴラスイッチで、まだトリガに達していないのにも関わらず、仕組みが勝手に動き出したらせっかくの装置が台無しです。関数プログラミングでも同様で、「実際に使う時」が来るまで関数は評価されません。
使いもしないのに勝手に関数が評価されてしまっては、値が予期せず変化してしまい、せっかくのプログラムが台無しです。