ちょっとずつCommon Lispをはじめよう

ちょっとずつCommon Lispを始めよう。xyzzyでもある程度サブセット的なものを動かせるから、最初はxyzzyで動かそうかな。

Schemeに比べて汚い印象が強いCommonLisp。キタナイというのはもちろんそのとおりで、最小主義ではないからだ。

Wikipediaから

では、Wikipedia(wikipedia:Common Lisp)から見てみましょう。

Common Lisp はマルチパラダイムで汎用目的の言語である。

手続き型のプログラミング、関数型のプログラミング、オブジェクト指向プログラミングのパラダイムの組み合わせをサポートしている

C++のような言われ方ですね。

defun マクロは関数を定義する

Schemeなら変数も関数もdefineなわけです。まあ、Common Lispだと値と関数の名前空間が別々というのもありますが。
どちらもlambdaキーワードがあります。

Scheme の標準規格は 末尾再帰の最適化 を要求しているが、CL の規格はしていない。 ほとんどの CL 実装は末尾再帰の最適化を提供するが、それでもプログラマーが最適化宣言を使った場合のみである場合が多い。

例のプラグマ、proclaimですね。わかります。感覚的にはCのinlineみたいなもんでしょうか。要求はできるけれども、飲まれるとは限らない、されど要求無ければ、達せられることもなく。

Scheme プログラマが末尾再帰で表現するものを、CL ユーザーは do,olist,oop,廼瓩世・iterate パッケージを使って反復で表現する。

ん〜…文化の違いでしょうか。まあ、再帰は嫌いじゃないんだけど、まあ、反復のほうが現実的か。