SA
Size: a a a
SA
SA
SA
SA
SA
SA
SA
SA
SA
a
SA
SA
SA
SA
SA
SA
SA
a
SA
new.right.parent
а не (parent (right new))
SA
(defmacro with-snames (&body body)
(labels ((dotsplit (str)
(loop :with acc := (make-array 0 :adjustable t :element-type 'base-char)
:with res := '()
:for char :across str
:if (char= #\. char)
:do (push acc res)
(setf acc (make-array 0 :adjustable t :element-type 'base-char))
:else :do (vector-push-extend char acc)
:finally (push acc res)
(return res)))
(transform (list)
(destructuring-bind (fst . rst) list
(if rst
`(slot-value ,(transform rst) ',(intern (string-upcase fst) 'rb-tree))
(intern (string-upcase fst) 'rb-tree))))
(rec (ls)
(mapcar (lambda (object)
(cond ((and (symbolp object) (not (keywordp object)))
(transform (dotsplit (string object))))
((consp object)
(rec object))
(t object)))
ls)))
`(progn ,@(rec body))))