Plaster
New
List
Login
common-lisp
default
anonymous
2021.12.05 19:34:26
(defmacro rsetf (recursive-hash-plist value &rest indicators) (macrolet ((getf-hash-plist (hash-or-plist key) (if (hash-table-p (eval hash-or-plist)) `(gethash ,key ,hash-or-plist) `(getf ,hash-or-plist ,key)))) (labels ((build-rsetf (value keys &optional output) (if (not keys) `(setf ,output ,value) (build-rsetf value (rest keys) `(getf-hash-plist ,output ,(first keys)))))) (build-rsetf value indicators recursive-hash-plist))))
Raw
Annotate
Repaste
Edit
Annotations
text
default
anonymous
2021.12.05 19:44:36
(defmacro rsetf (recursive-hash-plist value &rest indicators) (labels ((build-rsetf (value keys &optional output) (if (not keys) `(setf ,output ,value) `(build-rsetf value (rest keys) (getf-hash-plist ,output ,(first keys)))))) `(macrolet ((getf-hash-plist (hash-or-plist key) (if (hash-table-p (eval hash-or-plist)) `(gethash ,key ,hash-or-plist) `(getf ,hash-or-plist ,key)))) ,(build-rsetf value indicators recursive-hash-plist))))
Raw
Repaste
Edit
text
default
anonymous
2021.12.05 20:24:08
(defun set-innermost-object (object value &rest indicators) (assert (not (null indicators))) (if (null (rest indicators)) (if (hash-table-p object) (setf (gethash object (first indicators)) value) (setf (getf object (first indicators)) value)) (set-innermost-object (if (hash-table-p object) (gethash object (first indicators)) (getf object (first indicators))) value (rest indicators))))
Raw
Repaste
Edit