Size: a a a

2020 October 21

SA

Sokolov Andrew in Lisp Forever
ну
источник

SA

Sokolov Andrew in Lisp Forever
по аст
источник

SA

Sokolov Andrew in Lisp Forever
ну бля по листу же лол
источник

SA

Sokolov Andrew in Lisp Forever
короче
источник

SA

Sokolov Andrew in Lisp Forever
я сначала пишу на классах а потом переписываю на структуры
источник

SA

Sokolov Andrew in Lisp Forever
на классах удобно дебажить
источник

SA

Sokolov Andrew in Lisp Forever
на структурах работает с норм скоростью
источник

SA

Sokolov Andrew in Lisp Forever
с функциями потребуется прямо
источник

SA

Sokolov Andrew in Lisp Forever
много писанины какой то
источник

a

akater in Lisp Forever
Sokolov Andrew
ну бля по листу же лол
Если просто по листу как он написан, то там 100% баг, и не один, если этот обходчик дерева не есть 100% правильный code walker.
источник

SA

Sokolov Andrew in Lisp Forever
и не дай бог их руками определять там еще и тиып не проеби вписать и инлайны и все
источник

SA

Sokolov Andrew in Lisp Forever
ну давай пример
источник

SA

Sokolov Andrew in Lisp Forever
я уверен на 100% что перебираю рекурсивно все символы дерева
источник

SA

Sokolov Andrew in Lisp Forever
давай расскажи мне почему это сложно
источник

SA

Sokolov Andrew in Lisp Forever
если хуйня символ и не ключевой то мы его чекаем
если хуйня лист то мы рекурсивно топаем внутрь
в остальных случаях не трогаем
И все это мап
источник

SA

Sokolov Andrew in Lisp Forever
я сам знаю место где оно может сломаться но поскольку это ваще локальный макрос то
источник

SA

Sokolov Andrew in Lisp Forever
я не суну в него то что его сломает
(имя начинающееся с точки)
источник

a

akater in Lisp Forever
Несомненно, что проблема там есть если это не code walker.  Чтобы найти конкретный пример, где ломается, нужно видеть имплементацию.
источник

SA

Sokolov Andrew in Lisp Forever
ну и да кст я читаю описание алгоритма
и таки там удобнее делать new.right.parent а не (parent (right new))
источник

SA

Sokolov Andrew in Lisp Forever
(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))))
источник