ぼくのかんがえたかんすうがたげんご(未完)

JavaScriptをベースにした「自分好みの関数型言語ってなんじゃらぽん」とつぶやいております。飽きっぽいので続いたり続かなかったり。
1
smw @Shi_MeiWo

数年前に知って衝撃を受けたのが、関数型言語。LISPとかHaskellとかのアレね。実はJavaScriptも関数型駆動ができると知ってから、とりつかれるように勉強した。Yコンビネータという極北までたどり着き、今思うのは「関数型に特化したJavaScriptができないものか」。

2011-01-10 19:55:44
smw @Shi_MeiWo

で、JavaScriptの文法だけでは心もとないので、さいきんHaskellと混ぜあわせたような言語仕様を考えている。構文解析とか知らないから、ただの空想で終わる物なんだけど、考えている間は楽しい。アレはどう表現しよう?なんて考えていると、ちょっとした興奮も味わえる。

2011-01-10 19:58:34
smw @Shi_MeiWo

ただ、オブジェクト指向言語の「データと手続きをカプセル化する」という便利さは、一度味わってしまうと手放せない。関数型言語の潔癖さは、言語利用者にストレスを与えるかもしれない。

2011-01-10 20:07:53
smw @Shi_MeiWo

例えば、線形コレクション、具体的にはArrayの末尾にデータを追加するという場合は、オブジェクト指向なら「Array.push(データ)」だし、関数型なら「push(Array)(データ)」となるだろう。pushは「データに束ねられた機能」なのか、「純粋な関数」なのか、分かれ道。

2011-01-10 20:11:35
smw @Shi_MeiWo

なるべく、同じことを表現するのに複数の方法を用意したくない(初学者を方法論で悩ませたくないから)。でも、キレイだけど不便な物を押し付けるのは、自己満足だけのエゴではないのか。そう考えると考えが袋小路に入ってしまう。

2011-01-10 20:17:02
smw @Shi_MeiWo

でも、参照透過性にちょっとだけ目をつぶる機能をつけることで、クロージャをクラスに仕立てることは考えている。なので、毒食わば皿までで、オブジェクトみたいにアクセスさせてもいいかな・・・。おっと、そろそろ夕食を摂らなければ。

2011-01-10 20:35:02
smw @Shi_MeiWo

自作言語、クロージャとクラスをもっとスマートに関連付けられないかと思案中。JavaScriptみたいにオブジェクトと関数が同じもの位の、大胆なパラダイムシフトが欲しい

2011-01-13 12:07:35
smw @Shi_MeiWo

例の自作言語の話。関数とは要するに連想配列で、ある手続きを経ることで内部の「フロー」を実行するという仕組み(JavaScriptの考え方)だと考えてみた。この時、「フロー」をどのように持つのかがふと疑問に思った。

2011-01-20 03:41:08
smw @Shi_MeiWo

JavaScriptにおける関数は「関数型オブジェクト」で、暗黙的なメソッド「apply()」により、スコープと引数を与えられる。引数はargmentオブジェクトという線形コレクションとして渡される。そして、「フロー」は…コードそのものの姿。

2011-01-20 03:43:34
smw @Shi_MeiWo

つまり、「フロー」を文字列の形で持っていて、apply()のさいに解釈され、実行される。いわばその都度eval()してるようなもの(実際はJITコンパイラの恩恵で、もっとマシな処理をしているが)。JavaScriptで、関数をそのままalert()してみれば、その意味がよくわかる

2011-01-20 03:46:07
smw @Shi_MeiWo

でも、今俺の構想しているものでそれをやると。ちょっと困る。{@argment:String=>"x",@flow:String=>"alert(x)\nreturn x+10"}関数は連想配列というルールを潔癖に守るとこうなる。フローが見にくくてしょうがない。

2011-01-20 03:49:49
smw @Shi_MeiWo

JavaScriptはシンタックスシュガーを使い、function(x){alert(x);return x+10;};と表現しても良いことになっているが、今回はシンタックスシュガーを使いたくない。Perlの"TMTOWTDI"なんてのは初学者の混乱のもとだからだ。

2011-01-20 03:54:20
smw @Shi_MeiWo

仕事場からコソーリ。例のアレ、モナドをネイティブで実装するという手をふと考えてみた。例えば「Unite(myFunc)->var(+a:Number)(10)->add(a)(5)//15が戻る」これも関数がファーストクラス。

2011-01-20 20:52:36
smw @Shi_MeiWo

しっかし、改めてモナドをおさらいしたけど、コレを考えた人は天才だね。数学者のロジックと、一休さんのトンチを両方合わせ持ってないとこの発想は出てこないぞ。 #monad #fop

2011-01-20 20:57:22
smw @Shi_MeiWo

関数型言語もそうなんだが、俺は自作言語に強い執着がある。というのも、この言語というもののために、どれだけの初学者が挫折し、コンピュータという沃野から遠ざかっていったかを思い、僭越ながら憂いているためだ。そもそも「言語」がなければアーキテクチャと戯れることができないのも変な話だ。

2011-02-18 21:46:42
smw @Shi_MeiWo

コンピュータは電子計算機である以上、プログラミングは避け得ない。ソロバンだって定められたはじき方に従わないと足し算すらできん。だが、その手段が「言語」であるなら、平易で簡素な方がいいし、そもそも「言語」にこだわらなくたっていい(極端かもしれんが、間違いではなかろう)。

2011-02-18 21:50:49