Size: a a a

2020 October 14

VL

Valeriy L in Lisp Forever
Sokolov Andrew
(defun valid-sequence (sequence)
 (let ((stack (make-array 10 :adjustable t :fill-pointer 0
                             :element-type 'base-char :initial-element #\()))
   (and
    (every (lambda (p)
             (if (member p '(#\( #\{ #\[))
                 (vector-push-extend p stack)
                 (and (/= 0 (length stack))
                    (char= (ecase (vector-pop stack)
                             (#\( #\))
                             (#\[ #\])
                             (#\{ #\}))
                           p))))
           sequence)
    (= 0 (length stack)))))

кто сможет короче но так чтоб все еще читаемо
а обязательно чтобы был fast fail?
источник

VL

Valeriy L in Lisp Forever
как тебе такое, илон маск?
(defun valid-sequence (sequence)
 (let (stack (alphabet '(?\( ?\) ?\[ ?\] ?\{ ?\})))
   (and (every (lambda (p)
                 (if (cl-getf alphabet p)
                     (push p stack)
                   (eq p (cl-getf alphabet (pop stack)))))
               sequence)
        (null stack))))
источник

VL

Valeriy L in Lisp Forever
извиняюсь за elite-lisp
источник

VL

Valeriy L in Lisp Forever
вообще хотелось бы как-то через заloop написать, чтобы было всё по православному
источник

VL

Valeriy L in Lisp Forever
но короче не получается сделать
источник

VL

Valeriy L in Lisp Forever
֍ ֎
(defun valid-sequence (seq)
 (not (= nil (read-from-string (format nil "~{~A~}" seq)))))
(valid-sequence '(("#.(print \"sosi nogu\")")))
источник

SA

Sokolov Andrew in Lisp Forever
Ну нет встроенным ридером
источник

SA

Sokolov Andrew in Lisp Forever
Это хуйня
источник

SA

Sokolov Andrew in Lisp Forever
Там человеку алгоритм нужен
источник

SA

Sokolov Andrew in Lisp Forever
Фаст фейл тоже желателен так как с ним потом можно указать проблему
источник

VL

Valeriy L in Lisp Forever
Sokolov Andrew
Там человеку алгоритм нужен
а абуз списка как plist считается?
источник

VL

Valeriy L in Lisp Forever
Valeriy L
как тебе такое, илон маск?
(defun valid-sequence (sequence)
 (let (stack (alphabet '(?\( ?\) ?\[ ?\] ?\{ ?\})))
   (and (every (lambda (p)
                 (if (cl-getf alphabet p)
                     (push p stack)
                   (eq p (cl-getf alphabet (pop stack)))))
               sequence)
        (null stack))))
короче я потом потестил варианты и если вот это переписать через loop то быстрее выходит и читаемее имхо
источник

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
а еще в чем?
источник

VL

Valeriy L in Lisp Forever
Sokolov Andrew
а в чем существенная разница?
нет, не в этом
источник

VL

Valeriy L in Lisp Forever
а в том что абузится лист как plist
источник

SA

Sokolov Andrew in Lisp Forever
ну не только в этом
Стак то у тебя лист
источник