On Thu, 2 Dec 2010, Peter Seibel wrote:
My taste tells me that's an over-clever idiom and should not be used. If it's not clear that a function is for-effect without (values) you've already lost.
I confess that I have used (values) before, not only to indicate that a function was for effect only, but also to prevent any implementation detail from leaking out. I also like m-v-l's behavior when receiving (values).
(I also confess that I haven't been consistent in this use.)
On the other hand, I agree with Peter that it can be somewhat ugly. Maybe some alternatives, based on (values)?
(defun f () (for-effect (setq *foo* 'bar)))
Or, how about:
(defeffect f () (setq *foo* 'bar))
for-effect and defeffect could have the added benefit of guaranteeing that *no* return path will return a value.
-David