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