- 163 名前:SCHEME餃子 ◆8X2XSCHEME mailto:sage [2011/11/09(水) 00:42:50.37 ]
- >>160
どういうものを関数型って呼ぶかは明確な定義があるわけじゃありません。 でも Scheme や CL はマルチパラダイムを標榜してはいますね。 LISP 族の中には純粋関数型のものだってあると思いますが、それは少数派。 関数型的な特徴は「プリミティブ」であって、その上に様々なパラダイムを載せられるのが LISP の強力な点だとされています。 例えば Java だって関数型のアプローチでプログラムすることは出来ます。 C++ を定理証明に使うアイデアもあります。 www.kmonos.net/wlog/102.html#_0103091022 でも、 Java は関数型ではなくて、 C++ は定理証明器ではありません。 何故なら、そういった書き方はプログラマがそういうパターンに沿って書くことが一応可能であるということであって、そのように書くための道具 (語彙) を作ることが難しいからです。 つまり、抽象度の違いです。 Java は手続的なアプローチに抽象化する道具は揃っていますが、そうではないパラダイムを持ち込もうとすると言語のサポートは望めないのです。 一方で、 LISP はどうでしょうか? SICP にあるような Prolog もどきや回路シュミレータを見ればわかるように、一旦ライブラリを構築してしまえば「もはやそういう言語であるかのように記述できる」のです。 これらの差が生じるのは、一般的な言語における抽象はそれぞれの言語ごとでのパラダイム (クラスとかテンプレートとか) が単位であるのに対し、 LISP ではS式という「記法」が単位であるからだと私は考えています。 あらゆるパラダイムをひとつの言語で実現できて、時には混在もできるというのは圧倒的な強みになると思います。 それが、私が LISP (Scheme) を好む理由です。 下手するとカオスになるというデメリットと隣りあわせではありますけどね。
|

|