Reasoned Schemer (45) 10章 ext-s
(ext-s x v s)
はsubstitution s
にassociation `(,x . ,v)
を
追加したものを返す
ただし循環参照ができるようなassociationは追加できず#fを返す
循環参照かどうか判定するのは(occurs? x v s)
まずv
をs
でsubstitutionしておいて
v
がvarでv
とx
が同じものなら真
v
がpairならv
のcarにx
がoccurしてるかcdrにoccurしてれば真
そうでなければ偽
これだと(occurs? x x `((,x e)))
が真になって
(ext-s x x `((,x e)))
を評価すると `(,x . ,x)
というassociationが
追加されてしまうんだけどこれはいいんだろうか