作者: Tsutomu Hiroshima
日時: 2002/5/24(17:57)
廣島です.
;;; まつもとさん の方が詳しいのではないかとビビリつつ...
;;; おかしなことを言っていたら指摘して下さい.

Scheme には,構文拡張機能があります.

言語仕様書の プロシージャ の説明の欄には必ず
プロシージャ と ライブラリ プロシージャ の区別があり,
シンタックス の説明の欄にも
シンタックス と ライブラリ シンタックス の区別があります.

ライブラリ プロシージャ と ライブラリ シンタックス は,
他の プロシージャ と シンタックス で定義できることを示しています.

例えば,for ループにあたる (do ... ) は,
終端再帰で定義可能な構文のため,
ライブラリ シンタックス に分類されます.
局所変数導入の (let ... ) は λ式 で定義可能なため,
これも ライブラリ シンタックス です.

Scheme 界では,あれば便利だけど,他の形式で実現できる機能を,

「シンタックス・シュガー(糖衣構文)」

と呼びます.ループも「シンタックス・シュガー」です.

他の言語で提供される「贅沢な機能」,例えば,
並列処理,例外処理,いれこになったループからの脱出,オブジェクト指向
等は言語仕様には含まれていません.
終端再帰,λ式,継続等を使って構文拡張機能で実現できるからです.
;; 実現方法を考えるのも Scheme の愉しみです.

この様に,Scheme の言語仕様には
ほんの少しの「シンタックス・シュガー」しか含んでいません.
(実際には便利な機能を既に拡張して実装している処理系が多いです.)

このため,Scheme はアルゴリズムの研究・学習に集中できる,
「スリムで健康的な」言語と考えられています.
;; なにしろ Scheme の大抵の教科書には Scheme 自身で記述した
;; 機能限定版の Scheme インタープリタ設計の章があるのです.

私には実用以前に,考える愉しみを与えてくれる言語です.
-----------------------------
	廣島 勉
	(tsutomu@...)