been using has been ||= .
If you haven't seen it before think of it in terms of += .
So x ||= 3 is equivalent to x = x || 3.
I've found this pretty useful in a couple of cases and decided to write a
CL implementation of it. I give you ORF.
(defmacro orf (place value &environment env)
(multiple-value-bind (vars vals store-vars writer reader)
(get-setf-expansion place env)
`(let* (,@(mapcar 'list vars vals)
(,@store-vars (or ,reader ,value)))
,writer)))
So now (orf x 3) === (setf x (or x 3))
with the minor caveat that x will only being evaluated once.
Truly, Lisp is the Borg of programming languages.
No comments:
Post a Comment