On Mon, 08 Oct 2012 17:38:42 +0200, Didier Verna said:
Pascal Costanza wrote:
Just guessing: If you see that the writer form is a funcall to a setf function, you can then check with fboundp if such a function actually exists. This is probably a bit shaky, but maybe good enough for practical purposes?
Good idea. To be more precise:
- if the writer form is something else than (FUNCALL #'(SETF FOO) ...) then there is a defsetf going on (it even takes precedence over a potential setf function).
- if the writer form is (FUNCALL #'(SETF FOO) ...) and that function is bound, then there is a setf function going on but no defsetf.
- otherwise, there is no writer at all.
I think this might just work.
As Pascal said, it's a bit shaky. E.g. a user could define (defsetf foo (x) (y) `(funcall #'(setf foo) ,y ,x)) which gives a false negative. Also, it won't be portable, because the (FUNCALL #'(SETF FOO) ...) form isn't required (the standard just specifies something with the same effect as it). -- Martin Simmons LispWorks Ltd http://www.lispworks.com/