LINUX.ORG.RU

Вопрос про историю лиспа

 , ,


2

2

Мне понравилось замечание в SICP что у лиспа довольно специфичный взгляд на синтаксический сахар. Но вот я не могу понять почему в таких формах из CL как cl:defun или cl:destructuring-bind у ключевых симоволов &key, &optional приставка & вместо использования более адекватных для CL кейвордов?

★★★★★

Последнее исправление: ados (всего исправлений: 1)
Ответ на: комментарий от Lancelot

Этож язык для обучения школьников и студентов, кто его юзать то будет?

Deleted
()
Ответ на: комментарий от Artamudo

Инженерия с граблями прилагается?

Если нет возможности стрелять в ноги, то какая это инженерия?

mv ★★★★★
()

Об Lisp и др. языках программирования.

Развитие архитектур языков программирования застыло на отметке 1960 г.
Почему так произошло?
Ответ прост.

Чеховский врач знал одно лекарство                  - касторка.
Языки программирования также знают одно "лекарство" - грамматики.

И все «умные» головы полагают, что «грамматики» являются «столпом» создания любого языка программирования и якобы других путей нет и не может быть.

Владимир

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

Может использует какая компания в продакшене

Naughty dog, Untyped.

и есть исходники

А хоть для каких-то коммерческих проектов есть исходники???

хочу посмотреть как люди пишут в боевых условиях

Есть достаточно крупные открытые проекты: https://github.com/alex-hhh/ActivityLog2 , https://github.com/fractalide/fractalide , https://github.com/greghendershott/frog , https://github.com/mbutterick/pollen

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

а & напоминает скрипичный ключ, с натяжкой конечно, но всё таки.

— Откуда бредете, Иван Николаевич?
— А за городом был, прогуливался... На виселицу любовался; поставлены у заставы.
— Тоже нашли удовольствие: на виселицы смотреть!
— Нет, не скажите. Я, собственно, больше для чтения: одна виселица на букву Г похожа, другая на П. Почитал и пошел.

А.Аверченко «Этапы русской книги», этап 6

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

Смысл lisp-1 в том, что не приходится использовать function и funcall

function засахарен - «#'», а funcall используется не часто, В моих поделках и квиклиспе - примерно в четверти файлов, в sbcl-source/src/code/ (где ожидаешь максимум функолов) - в половине.

Если бы funcall сильно напрягал, то его давно бы засахарили:

(set-dispatch-macro-character #\# #\, #'(lambda (stream subchar arg)
                                          (declare (ignore stream subchar arg))
                                          'funcall))

Пример:

TEST> (defvar square #'(lambda (n) (* n n)))
SQUARE
TEST> square
#<FUNCTION (LAMBDA (N)) {100320E89B}>

TEST> (#, square 3)
9
TEST> (#,square 5)
25

; и даже

(#,#'+ 1 2 3)
6

Вот как это в CL правильно делать?

Для ЦЛ более идиоматичным является первый вариант. Но допускаю, что в какой-либо задаче, может оказаться правильнее использовать другие варианты.

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

для тех кого напрягают скобки в блоке переменных let/let*:

Ты забыл про бузину в огороде.

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

Если бы funcall сильно напрягал, то его давно бы засахарили:

В CL пошли по другому пути. Просто стараются минимально его использовать. Там, где в Scheme функция в CL макрос или рестарт:

call-with-input-file,call-with-output-file // with-open-file

dynamic-wind // unwind-protect

hash-table-walk // with-hash-table-iterator

Значения по умолчанию: для gethash — возвращаемый элемент для hash-table-ref — функция без аргументов

Сейчас пример сходу не найду, но там, где в CL принято писать рестарты, в Scheme передают функцию для выполнения при ошибке.

В результате в Scheme удобнее делать компоненты: классы и функции могут быть локальными внутри блока. Имена можно делать абсолютно произвольные, заботишься только об отсутствии коллизий внутри блока. В Racket ещё и раздельную компиляцию модулей сделали.

В CL удобнее делать на ходу заплатки к чужому модулю. Есть доступ почти к любым данным любого пакета, причём на запись. Но это же часто является оправданием для неаккуратного написания пакетов. Ведь настоящий инженер всё равно сможет его использовать.

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

В CL удобнее делать на ходу заплатки к чужому модулю.

Для разработчика, одно это перевешивает все косяки языка! Обратной стороной является трудность поддержки продуктов, особенно крупных. Проще переписать на «мейнстримовые» языки.

Но это же часто является оправданием для неаккуратного написания пакетов.

В таких случаях возникает мысль, что запрет физического наказания учеников ведет к деградации образования. :(

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

В самой серьёзной работе иногда следует пошутить, и ребята пошутили. Могли бы и № воткнуть вместо &, а мы бы пользовались.

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

В самой серьёзной работе иногда следует пошутить, и ребята пошутили. Могли бы и № воткнуть вместо &, а мы бы пользовались

Все больше укрепляюсь в мнении, что на ЛОР лучше предупреждать - «шутка» /иначе будет двадцать страниц «обид»/.

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

А.Аверченко «Этапы русской книги», этап 6

Интересная книга, только если по теме

а & напоминает скрипичный ключ, с натяжкой конечно, но всё таки.

то меня надо колотить было особым манером, например, в силу технических причин &key ложился в машиный код лучше, чем №key.

Этим занимаются все програмисты присутствующие на форуме.

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

Принимаю к сведению. Теперь буду предупреждать.

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

Я имел в виду, что коммерческая компания выкладывает какие-то свои наработки, а не «поделки студентов». В общем спасибо

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

Я имел в виду, что коммерческая компания выкладывает какие-то свои наработки, а не «поделки студентов»

Если покажете, что имеете в виду для Python или Go или даже C++, попробую найти.

Потому что если просто критерий коммерческой компании, то я не понимаю, чем https://github.com/microsoft/monaco-editor лучше, чем https://github.com/alex-hhh/ActivityLog2

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

Настолько глобального нету.

Коммерческое, но не настолько глобальное: https://github.com/technomancy/atreus https://github.com/fractalide

не «поделки студентов»

Есть поделки профессоров:

https://github.com/tonyg/pi-nothing https://github.com/tonyg/syndicate https://github.com/soegaard/remacs

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