その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

関数型言語とピタゴラスイッチって似てる!

プログラミングHaskell 、読んでます。
ひと通り内容をさらったので、今は牛歩でじっくりと精読しながら、実際にプログラムを書くなどしております。
パーサーの部分とか対話プログラムの部分とかがむつかしいと感じる今日この頃です。


ここで言う「ピタゴラスイッチ」とは


的な、ルーブ・ゴールドバーグ・マシンのことです。


なにがいいたい

関数プログラミングの発想・理念は
  • 関数は引数を与えられて、それに応じた結果を返す
  • 関数はパーツである
  • パーツである関数の組み合わせによってプログラムを構築する
  • 関数は実際に使う時まで評価されない(遅延評価)
という点にあると思います。
これってすごくピタゴラスイッチじゃん! とふと思ったので。


たとえば

関数は引数を与えられて、それに応じた結果を返す
ピタゴラスイッチで言うと、「ビー玉」が入力で「ドミノ」が出力になると言えるでしょう。
「ビー玉」が激突する事により、「ドミノ」が倒れる、という結果が得られる一連の流れは関数的ではないでしょうか。

関数はパーツである
ピタゴラスイッチで言うところの、一つ一つの仕事を為す仕組みたちです。
それはビー玉がぶつかる事によってドミノが倒れる仕組みだったり、
おもりの付いた振り子が揺れてぶつかる事によって台車が走りだす仕組みだったりするでしょう。

パーツである関数の組み合わせによってプログラムを構築する
上記のような、一つではあまり意味のないパーツたちを組み合わせて、
最終目標(例えば「旗を揚げる」だとか)を達成するのがピタゴラスイッチ
一つではあまり嬉しくない関数(パーツ)、例えばリストの先頭要素を取り除く関数なんかを
組み合わせて最終的な出力を得るのが関数プログラミング

関数は実際に使う時まで評価されない(遅延評価)
ピタゴラスイッチで、まだトリガに達していないのにも関わらず、仕組みが勝手に動き出したらせっかくの装置が台無しです。
関数プログラミングでも同様で、「実際に使う時」が来るまで関数は評価されません。
使いもしないのに勝手に関数が評価されてしまっては、値が予期せず変化してしまい、せっかくのプログラムが台無しです。


という感じで

関数プログラミングってなにさ」と訊かれた時は「ピタゴラスイッチ!」と答えるとストンと落ちるのでは。




ところで

初学者向けのHaskell 勉強会みたいなのって開催されて無いですかね?
最初で申し上げたとおりプログラミングHaskell を読んでいますが、理解するのがむつかしい部分が色々あるので……
いっその事、プログラミングHaskell 読書会みたいな感じでも嬉しいんですが。

一緒にお勉強してくれる人がほしい!!