No, you're not missing anything, your version is better. I just didn't think that through. I was combining a similar function from a personal utils library, and my macro used lambdas to pass the default value to a driver function. I also recently learned about constantp and just got excited :).
Thanks,
Ryan Davis Acceleration.net Director of Programming Services 2831 NW 41st street, suite B Gainesville, FL 32606
Office: 352-335-6500 x 124 Fax: 352-335-6506
On Friday, December 30, 2011 12:41:12 PM, Nikodemus Siivola wrote:
On 21 December 2011 20:30, Ryan Davis ryan@acceleration.net wrote:
I'm using a hash-table as a cache, and had a problem with ensure-gethash. Some example code / output:
I must be missing something. Why the CONSTANTP and LAMBDA instead of
(defmacro ensure-gethash (key hash-table &optional default) "Like GETHASH, but if KEY is not found in the HASH-TABLE saves the DEFAULT under key before returning it. Secondary return value is true if key was already in the table." `(multiple-value-bind (value ok) (gethash ,key ,hash-table) (if ok (values value ok) (values (setf (gethash ,key ,hash-table) ,default) nil))))
?
Cheers,
-- nikodemus