Size: a a a

2020 October 13

AK

Andrew Kravchuk in Lisp Forever
Смотря из каких и при каких обстоятельствах. Вроде в каких-то краевых случаях sbcl+cffi умеет грамотно оптимизировать fixnum'ы и C-шные строки, и даже stack-аллоцировать, но в целом да, лучше избегать лишних конверсий туда-сюда
источник

VL

Valeriy L in Lisp Forever
в контексте liballegro
источник

a

akater in Lisp Forever
Valeriy L
индивидуально с этим я совсем не соглашусь
Согласен: последовательный синтаксис типа >0 будет заведомо неудобный, и в какой-то момент композицию все равно заменяют словом.

Так что иметь слова для популярных операций естественно.  Я б, впрочем, предпочел бы даже избегать использовать инфиксный символ в соответствующей префиксной записи.  В Mathematica вот x + y это Plus[x, y], а не +[x, y].
источник

VL

Valeriy L in Lisp Forever
Andrew Kravchuk
Смотря из каких и при каких обстоятельствах. Вроде в каких-то краевых случаях sbcl+cffi умеет грамотно оптимизировать fixnum'ы и C-шные строки, и даже stack-аллоцировать, но в целом да, лучше избегать лишних конверсий туда-сюда
понял, спасибо
источник

AK

Andrew Kravchuk in Lisp Forever
Valeriy L
в контексте liballegro
эт ясно
disassemble твой друг и товарищ для этих целей))
источник

VL

Valeriy L in Lisp Forever
ок)
источник

VL

Valeriy L in Lisp Forever
akater
Согласен: последовательный синтаксис типа >0 будет заведомо неудобный, и в какой-то момент композицию все равно заменяют словом.

Так что иметь слова для популярных операций естественно.  Я б, впрочем, предпочел бы даже избегать использовать инфиксный символ в соответствующей префиксной записи.  В Mathematica вот x + y это Plus[x, y], а не +[x, y].
ага, это интересная мысль. Я тоже думал о том что всякие одно-символьные символы хреново читаются
источник

VL

Valeriy L in Lisp Forever
#'+ ужас какой-то
источник

SA

Sokolov Andrew in Lisp Forever
ой да ладно вам
источник

a

akater in Lisp Forever
Valeriy L
ага, это интересная мысль. Я тоже думал о том что всякие одно-символьные символы хреново читаются
По-своему нормально читаются (в инфиксе вот), но лучше иметь отдельные символы прям для префиксов.  А #'+ это да, не очень.
источник

VL

Valeriy L in Lisp Forever
#'add >> #'+
источник

VL

Valeriy L in Lisp Forever
(add 1 2 3) а тут уже сомнительно
источник

a

akater in Lisp Forever
Я пытаюсь уже некоторое время записывать решения упражнений в секспах — в т.ч. чтоб представить себе, как выглядела бы компьютерная алгебра если надо много писать на Лиспе и без презентаций (я в курсе про SICM, если что), и нередко получается микс, типа


(= zj
  (* x+yi j)

  (*   (+ x   yi)  j)
  (+      xj  yij)
  (+     jx  -yji)
  (* j (+ x  -yi))

  (* j x-yi)
  jz*)


Это по сути тоже замена цельными словами.  Формально даже можно просто представлять себе символ-макросы тут.
источник
2020 October 14

SA

Sokolov Andrew in Lisp Forever
объясняю челу задачу про валидные скобочные последовательности (кто ее никогда не слышал придумайте сами)
источник

SA

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

SA

Sokolov Andrew in Lisp Forever
(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)))))

кто сможет короче но так чтоб все еще читаемо
источник

D

Dameda 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)))))

кто сможет короче но так чтоб все еще читаемо
Помню даже такой вопрос на экзамене о том какую структупу данеых выбрать доя этой цели
источник

VL

Valeriy L in Lisp Forever
ну это же обычный pushdown автомат
источник

֍֎

֍ ֎ 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)))))

кто сможет короче но так чтоб все еще читаемо
(defun valid-sequence (seq)
 (not (= nil (read-from-string (format nil "~{~A~}" seq)))))
источник

VL

Valeriy L in Lisp Forever
cheater
источник