LINUX.ORG.RU

реально интересно

ну-ну

практическая польза

как говорит buddhist, на CL можно написать сайт о торговле наркотиками и оружием.

по теме: рестарты, макросы, clos.

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

1. насчитал штук 20, включая самописные, включая написанные коллегами.
2. количество вакансий это не показатель.
3. man lispworks, man allegrocl, man cffi

ymn ★★★★★
()

Чем хорош язык?

тем, что только полные идиоты его не знают.

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

Я имею в виду восстановление связывантя:

(let ((a 6)) (let ((a 5)) (print a)) (print a))

Тут смысл в том, что область видимости лексической переменной - в блоке, то есть в _месте_ кода, а динамической - как бы во _времени_, пока действительно связывание. Это я так, на всякий случай написал

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

(let ((a 6)) (let ((a 5)) (print a)) (print a))

С учетом того, что динамическое в твоем примете, а также лексическое связывание

(lexical-let ((a 6))
  (lexical-let ((a 5))
    (print a))
  (print a))
проводят к одному и тому же результату, то где-то ты гонишь.

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

динамическое в твоем примете

Там нет ничего динамического. Для динамического нужно объявление special

lexical-let

Нет такой буквы!^U Нет такого в CL. Ты про какой язык?

Вот вывод sbcl, раз не веришь:

* (let ((a 56)) (let ((a 5)) (print a)) (print a))

5 
56 
56
* > exit

Восстановление предыдущего связывания - не фича динамических переменных, их фича - что из можно использовать вне того блока, где они определены, пока действительно свзывание:

(defun foo () (print *a*))
(defun bar () (let ((*a* 5)) (declare (special *a*)) (foo))
(bar)

Восстанавливать связывание и C может.

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

Нет такой буквы!^U Нет такого в CL. Ты про какой язык?

Сейчас в Elisp и динамическое связывание есть и лексическое через lexical-let, на нем и проверял.

Вот вывод sbcl, раз не веришь:

Я как раз верю, но если ты говорить про отличие в дин. и лекс. связывании, то пример должен работать по-разному. А твой пример выдает одно и то же. Где разница?

(defun foo () (print *a*))
(defun bar () (let ((*a* 5)) (declare (special *a*)) (foo))
(bar)

Это уже совсем другой пример. И да, показательный для связывания. Вот аналогично для Elisp:
http://stackoverflow.com/questions/3786033/how-to-live-with-emacs-lisp-dynami...

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

Я как раз верю, но если ты говорить про отличие в дин. и лекс. связывании, то пример должен работать по-разному. А твой пример выдает одно и то же. Где разница?

Быстро укажи место, где я такое сказал. Я, бл%, какой раз повторяю, что восстановление связывания - фича не только динамических переменных.

Это я на утверждение, что дин. переменные - это, якобы, «стек в переменной». Смотри тред выше.

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

Сейчас в Elisp и динамическое связывание есть и лексическое через lexical-let, на нем и проверял.

Слушай, я в Emacs Lisp могу только куски конфига копипастить, которым со мной поделились

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

Быстро укажи место, где я такое сказал. Я, бл%

Иди уже реальный пацан (или клоун, кто ты там?), а то пацаны с района тебя заждались.

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

их фича - что из можно использовать вне того блока, где
они определены, пока действительно свзывание:

(defun foo () (print *a*))
(defun bar () (let ((*a* 5)) (declare (special *a*)) (foo))
(bar)

Странная трактовка и очень странный код - так не пишут же!

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

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

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

Не можешь указать, ясно

Я сказал следующее:

если ты говорить про отличие в дин. и лекс. связывании, то

Выучити, что такое сослагательное наклонение, наконец. Или у пацанов своих спроси, может кто из них школу не прогуливал.

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

Странная трактовка и очень странный код - так не пишут же!

так не пишут же!

Нет, пишут. Зачем, я не знаю. Ваш этот Эдичка:

https://github.com/edicl/hunchentoot/blob/master/specials.lisp

См. defvar-unbound.

Использование:

https://github.com/edicl/hunchentoot/blob/master/request.lisp

Связывание:

https://github.com/edicl/hunchentoot/blob/master/acceptor.lisp

И это при том, что acceptor и taskmaster так грамотно разнесены по 2 разным классам, выполняющим разныы функции. А остальной код - какая-то хрень. Назовете причину такого стиля, завязанного на динамических переменных?

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

Нет, пишут. Зачем, я не знаю. Ваш этот Эдичка:
https://github.com/edicl/hunchentoot/blob/master/specials.lisp
См. defvar-unbound.

Там нет явной декларации special. Я говорил именно о том, что явное указание special практически никогда не используется, ибо defvar и defparameter её включает (т.е. все переменные, объявленные с помощью defvar/defparamter изначально динамические).

Назовете причину такого стиля, завязанного на динамических
переменных?

Это очень удобно. Как я сказал выше, преимущества глобальных переменных без их недостатков. Забавно, что во Flask тоже request сделали глобальной переменной. Но в Python это костыль (спасает лишь то, что никто не пишет многопоточные веб-сервера на Python, ибо GIL), а в CL безопастная и удобная практика.

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

Это очень удобно.

Я как-то писал небольшой pretty-printer для паскале-кода, выраженного S-выражениями, при этом уровень индентации протаскивал как раз динамической переменной. Это хороший пример?

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

но задача не бог весть какая

Ну я там хотел перевести фокспрошный(досовский еще) код в делфийский(для начала просто почти дословно, там довольно много фокспрошного кода было, разобраться в котором было непросто) из некоторых соображений, но наткнулся на некоторые трудности, поэтому забросил. =)

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

Какая?

Как это какая?!? Для Python написаны миллионы библиотек!

Например! Например... библиотеки для парсинга URL... э-э-э... для парсинга HTML... м-м-м-э... кхм-кхм-кхм... и это... генератор HTML в конце-то концов!

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

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

Но скобкофобам - да, лиспы противопоказаны.

А страдающим от непривычного синтаксиса (того или иного) противопоказано программирование вообще :)

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

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

Вполне возможно, но у меня нету достаточного лисп опыта, чтобы судить. Мне, например, очень тяжело разбираться в скобконотации, чтобы понять что там к чему относится, подозреваю что в какой-нить аппликативной нотации, да ещё и с поинт-фри, лисперу будет тоже неудобно. Почему-то мне кажется, что такой синтаксис появился потому, что его проще парсить и с ним работать, а потом прижилось и нашли и другие плюсы, но это мнение почти ничем не обосновано.

А страдающим от непривычного синтаксиса (того или иного) противопоказано программирование вообще :)

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

Почему-то мне кажется, что такой синтаксис появился потому, что его проще парсить и с ним работать, а потом прижилось и нашли и другие плюсы, но это мнение почти ничем не обосновано.

Причина несколько другая, но с каких-то точек зрения не так и далека от вашей.
В «practical common lisp» этому уделили небольшую главу.
Если будет лень искать - могу скопипастить на пастебин.

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

если не сложно, можете запастить? просто я не сильно заинтересован в поисках книг по лиспу, но если информация сама свалится в руки - то прочитаю.

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

Как уже подсказал анононимус.
Если нет проблем с английским - эта глава описывает момент, почему синтаксис такой.
Если английский таки сложноват - скажите, скопирую с русского перевода (онлайн русская версия лежит, увы) книги, но будет не совсем удобно и приятно читать без форматирования.

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

Мне, например, очень тяжело разбираться в скобконотации, чтобы понять что там к чему относится

Секрет очень прост. Лисповый код надо читать по отступам как питоньячий, а не по скобкам, как делают новички. Отсюда у последних сложности, а лисперы лисповский код достаточно легко и быстро понимают. Этот момент описан у Пола Грэма и, кажется, у Питера Норвига.

Поэтому омерзительно выглядит тот код на лиспе, где отступы сделаны не по лисповским канонам, а по имитации каких-нибудь правил другого языка, чем часто злоупотребляют студенты в силу своего непонимания. Как тут говорят, за такое надо бить по рукам! В вопросе форматирования кода лучше всегда доверяться емаксу или лиспворксу. Тем более, это делается очень просто: нажал Tab, и готово.

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