うんうん

日記にまだ書いてないと思うけれども、「記号型ってのは参照に似てるっぽい」という理解は間違ってなかったようです。

> (setq y 11)
11
> (set 'x 'y)
y
> x
y
> (eval x)
11
> (setq y '(11 22))
(11 22)
> (eval x)
(11 22)

確認してみた↑
yの記号型をxに代入すると、xはyの記号型になる。したがって、xを評価するとyになる。
でもそのままじゃ使えないのでevalする。するとyの中身らしきものが表示される。
試しにyの値を変えてみると、xのevalの結果もそれに追従して変化した。

> (set 'x y)
11
> x
11
> (setq y '(11 22))
(11 22)
> x
11

今度は、記号型ではなくそのままyを'xにsetした場合。
この場合は代入後にyを変化させてもxは変化しなくなっている。
こういうのを「環境」って言うのかなーと思った。クロージャかぁ。


よく見ると参考ページではevalは使わずsymbol-valueを使ってる。
evalはむやみに使うな、とか何かに書いてあったけど、なんでなんだろ。近々調べておこうと思う。