Size: a a a

2020 July 15

SA

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

AE

Alexey Egorov in Lisp Forever
А чтобы уйти от ретардации with-slots и slot-value.
источник

SA

Sokolov Andrew in Lisp Forever
тут 1 раз
источник

SA

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

SA

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

SA

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

AE

Alexey Egorov in Lisp Forever
Давай!
источник

AE

Alexey Egorov in Lisp Forever
Алсо идеально было бы поддержать доступ через точку и без квадратных скобок, но я не придумал как.
источник

SA

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

SA

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

AE

Alexey Egorov in Lisp Forever
И опять же, без лишних скоупов with-slots и огромной вербоузности slot-value.
источник

AE

Alexey Egorov in Lisp Forever
akater
Нежелание видеть объект аргументом метода это дичь-с.
источник

AE

Alexey Egorov in Lisp Forever
Большинство методов в моих приложениях работают по такой логике.
источник

AE

Alexey Egorov 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
(defmacro with-dot-syntax (single-form)
 (labels ((transform (name)
            (if (not (keywordp name))
                (let ((strname (string name)))
                  (if (and (= 1 (count #\. strname :test #'char=))
                         (char/= #\. (char strname 0))
                         (char/= #\. (char strname (1- (length strname)))))
                      (let ((part1 (intern (subseq strname 0 (position #\. strname))))
                            (part2 (intern (subseq strname (1+ (position #\. strname))))))
                        `(slot-value ,part1 ',part2))
                      name))
                name))
          (map-transform (object)
            (if (atom object)
                (transform object)
                (mapcar #'map-transform object))))
   (map-transform single-form)))
источник

SA

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

SA

Sokolov Andrew in Lisp Forever
CL-USER> (macroexpand '(with-dot-syntax (progn (+ w.y w.z m.x))))
(PROGN (+ (SLOT-VALUE W 'Y) (SLOT-VALUE W 'Z) (SLOT-VALUE M 'X)))
источник