setfではassocを使えないんだね1。
CL-USER> wrk ((1 2) (3 4) (5 6)) CL-USER> (setf (assoc 3 wrk) 123) ; Evaluation aborted on #<UNDEFINED-FUNCTION (SETF ASSOC) {1003D452D3}>. CL-USER>
でもこうすると、中身を変更できるんだ。
CL-USER> wrk ((1 2) (3 4) (5 6)) CL-USER> (setf (cadr (assoc 3 wrk)) 99) 99 CL-USER> wrk ((1 2) (3 99) (5 6)) CL-USER>
これまた、RDBっぽい。
ちなみにまちがって下記のように書いたらSBCLは即エラーになったけれど、ABCLは永久ループにはまりこんでしまった。
CL-USER> wrk ((1 2) (3 4) (5 6)) CL-USER> (setf (cadr (assoc 3 wrk)) wrk)
elispはどうだろう。
(setf wrk '((1 2)(3 4)(5 6))) ((1 2) (3 4) (5 6)) (setf (cadr (assoc 3 wrk)) wrk) ((1 2) (3 #0) (5 6)) wrk ((1 2) (3 #0) (5 6))
なんじゃ?
Footnotes:
1
setfできるassocがalexandriaにあるらしい。