うんうん
日記にまだ書いてないと思うけれども、「記号型ってのは参照に似てるっぽい」という理解は間違ってなかったようです。
> (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はむやみに使うな、とか何かに書いてあったけど、なんでなんだろ。近々調べておこうと思う。