HaskellとKobold Script

OCamlにつられて、Haskellについてもあれこれ見て回っていたのですが、そのときに、下のページを見つけて読んでいて面白いと思ったこと。

About Haskell
関数型言語とは?
C, Java, Pascal, Adaといった言語は 命令型(imperative)言語です。これらは逐次実行されるコマンドの列により構成されているという意味で"命令型"と呼んでいます。Haskell関数型言語です。関数型プログラムはただ一つの式からなり、それが評価されることによりプログラムは実行されます。表計算ソフトを使ったことがある人は関数型プログラミングを 経験済みだと言えるでしょう。表計算ソフトでは各セルの値を、他のセルの値を基に決定します。ここで注目されるのは 何を計算するのかであり、どう計算されるかではありません。例えば

  • セルが計算される順序は指定されません。- その代わりに 表計算ソフトがそれぞれのセルの依存性に応じてセルの計算をしてくれるであろうという考えが根底にあります。
  • 表計算ソフトがメモリをどのように配置するかを指定することはありません。- むしろ、表計算ソフトが表面的には無限のセルの列があるように見せてくれて、実際に使用される時に初めてメモリを配置してくれることを期待します。
  • ほとんどの場合、各セルの値は、その値を計算するためのコマンドの列ではなく、ただ一つの式により指定されます。(式の中の部分式の評価順は問われません)。

この表計算ソフトにおける計算の順序が指定されないということから、代入という概念はそれほど役にたたないという面白いことが言えます。とりわけ、もし代入がいつ起こるか正確にわからないのであれば、それを有効利用することはできません! このことは、基本的に代入文を慎重に並べていくことにより計算を構成していくC言語や、メソッドの呼び出し順が重要となるJavaといったような慣習的な言語とはかなり対称的です。
このレベルの低い"どう"ではなくレベルの高い"何"に焦点を当てているのが、関数型言語が他と最も異なる特徴と言えます。

この考え方って、Kobold Scriptの考え方と同じですね。あまり意識していなかったですけど。ということは、Lisp的な書き方で、Kobold Scriptを再定義できるということかな? でも、そういう書き方に需要があるかどうかは別ですけどねぇ。
ただ、Kobold Scriptは遅延評価しないので、HaskellよりもCamlの方が動きは近いのか? てか、いい加減なことを書いていると墓穴を掘るな。