LINUX.ORG.RU

Смотрите, как умеет clisp

 


0

1

А вы знали, что если при создании пакета в clisp при помощи defpackage добавить (:modern t), например так:

(defpackage foo
  (:use :cl)
  (:modern t))

то при чтении символов из этого пакета ридер не будет приводить их к верхнему регистру, т.е. foo::lol, foo::Lol и foo:lOl будут обозначать разные символы.

Это же прям лисп 21 века! Так-то.

Clisp вообще самый лучший из всех реализаций, ящитаю

esandmann
() автор топика
Ответ на: комментарий от monk

Черт, всё таки такое есть в стандарте. Зато тут можно делать более тонкую регулировку через пакеты.

esandmann
() автор топика
(in-package :foo)
(defvar *a* 1)
(defvar *A* 2)

> (eq 'foo::*a* (find-symbol "*A*" :foo))
T
> (eq 'foo::*a* (find-symbol "*a*" :foo))
NIL

Внезапно...

monk ★★★★★
()
Ответ на: комментарий от monk

just for lulz, небось.

Вообще исходники clisp'а это что-то! Есть пару файлов по 18000+ строк, ужос

esandmann
() автор топика
Ответ на: комментарий от monk

О, я понял. Чтобы сохранить совместимость с обычным поведением ридера. Обычно пишут маленькими буквами и при этом ожидают, что имена будут большими

esandmann
() автор топика
Ответ на: комментарий от monk

Это я понял. Но не понял, зачем он это делает...

Эхо древних времён, когда компьютеры были маленькие, расстояния между ними --- большими, и чтобы докричаться друг до друга приходилось всё время пользоваться капслоком...

Точнее, раньше было принято программы писать в uppercase, наверное, потому что они часто сначала писались от руки и только потом вводились в машину, а ещё печатались на терминалах, в которых были только большие буквы.

Jini ★★
()
Ответ на: комментарий от Jini

Ты, конечно, проканал за умного, но тока не совсем понятно, нахера ты приплел то что было раньше к тому, что есть сейчас.

anonymous
()
Ответ на: комментарий от buddhist

Хорошо.

А вот вы знали, что будет, если в clisp попытаться переопределить константу вот так:

(defconstant +a+ '(1 2 3))
(defconstant +a+ '(1 2 3))

Воот!

esandmann
() автор топика
Ответ на: комментарий от esandmann

Так в любом лиспе предупреждение будет. Ведь список новый. Что гораздо хуже — (setf (car +a+) 4) тоже везде работает. Поэтому толк от defconstant на чём-то кроме символов и чисел сомнительный.

monk ★★★★★
()
Ответ на: комментарий от monk

Не-не. clisp предложит отключить варнинг (через переменную *suppress-similar-constant-redefinition-warning*) при «похожих» данных (типа такого списка).

esandmann
() автор топика

Вау, ну с этой фичей мы точно колонизируем Марс

vertexua ★★★★★
()
Ответ на: комментарий от stevejobs

...Clojure, или Scheme...

Речь шла про «все остальные лиспы».

P.S. Для буквоедов «про все остальные реализации Common Lisp».

monk ★★★★★
()
Ответ на: комментарий от Jini

а ещё печатались на терминалах, в которых были только большие буквы

This.

Древние телетайпы с кодом Бодо, которые использовались в начале компьютерной эпохи как терминалы. ASCII тогда ещё не придумали.

no-such-file ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.