SSブログ

Lisp の special forms [Lisp]

私がずっと Lisp の学習を始めてはわからんといってすぐに辞め、何かに釈然としていなかったこと(のひとつ)は special form だったのだと最近ようやく分かった。
(+ x 3) は x を置き換えるけど (define x 3) は x を置き換えない。
SICP のオンライン版をつらつらと眺めていたら「(define x 3) is not a combination」と書いてあってなんだそんなことかと思った。
多分 Lisp の特徴として喧伝される最小文法ということが先に頭にあるので形は同じでも意味解釈が異なる何通りもの special forms があるというのを頭が受け付けなかったのだ。

そしてもうひとつは先に Tcl を知っていたせいかもしれない。Tcl の構文は本当にひとつしかなくて、その意味解釈も set も if も while も含めて一貫している。Scheme で x にシンボル a が束縛されているときに (define x 3) とやっても a に 3 が結びつくわけではないけど Tcl で x に文字列 a が入っているときに set $x 3 とやれば変数 a に 3 が入る。一方通常の set x 3 なら x に 3 が入る。この置き換えルールは通常のコマンドと同様で set に対しても公平に適用されている。

でも Lisp でも (define 'x 3) が通常の変数定義の方法で (define x 3) が x を置き換える方法だとしてはいけないのだろうか?タイプが面倒。それはあるかもしれない。でもミニマルな文法を志向する考えからはそちらのほうが好ましい気もする。


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。