LINUX.ORG.RU

Приходилось ли вам писать на Лиспе?


2

2

Ну, что ж, в Development так в Development, хотя Лисп давно перестал быть мемом одного лишь Development'а (и даже одного ЛОРа). Итак, сабж!

[ ] Да, профессионально и за деньги
[ ] Да, just for fun и для самообразования
[ ] Да, участвовал в opensource-проекте
[ ] Да, пилил скрипты Emacs/GIMP/AutoCAD/Lilypond etc.
[ ] Да, в рамках образовательной работы (лаба, курсовик, диплом)
[ ] Да, в рамках академической работы (диссертация, статья, монография)
[ ] Да, мне сказали, что лисперов любят девушки
[ ] Нет, но собираюсь
[ ] Нет, и не собираюсь
[ ] Вообще-то я Джон МакКарти, а вы кто такие?
[ ] в Советской России Лисп пишет на тебе!

Приветствуются развернутые ответы и верифицируемые пруфлинки. Например, на какую фирму работали, в каком конкретно opensource-проекте участвовали, какая была тема научной работы, помогло ли с девушками, и тому подобное. INB4 буквоедов: под «лиспом» подразумеваются все языки семейства: Scheme, CL, Clojure и прочие.

★★

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

>Common Lisp хорош для серверов приложений, для скриптов не годится, с этим полностью согласен

Во-первых, отрадно видеть проблески выздоровления от болезни lisp-головного-мозка.
Во-вторых, что есть «сервера приложений»? Может, я неправильно понял термин... Или вы серьёзно думаете, что, переписав, например nginx или apache на lisp сделаете доброе дело для человечества?

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

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

или совокупность (Ax...xA) и морфизмов проекций pr: (Ax...xA) -> A, являющаяся пределом. от того, как именно мы определим П структурно, его поведение не изменится

собственно, вроде все согласны с тем, что П([]) = 0? несогласные остались? если нет - предлагаю закрыть тему

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

> Я просто тут вижу массу людей, которые преподносят LISP как панацею

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

ограниченную нишу.



О какой нише вы говорите? Немного из истории, Common Lisp был стандартизирован на деньги DARPA. Часто говорят, что специально для Пентагона был разработан язык Ada. Вот только обычно забывают, что таких было два: Ada для задач системного программирования и Common Lisp для всего остального. Такая ниша вас устраивает? Ну и вероятно американским военным в то время не приходилось админить веб-сервера и нужды в однострочных скриптах у них не было, так что да, для этого то же не подходит.

Я его привёл, переставьте строчки (чтоб получить убогое нечитаемое

решение типа LISP'ового варианта) - получите 3 строчки:



Смешно, как раз моё решение отлично читается, там всё предельно ясно и понятно. Ну а то, что Perl вообще читать нельзя, так все давно знают, угу.

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

> отрадно видеть проблески выздоровления от болезни lisp-головного-мозка.

На каком комменте вы поставили данный диагноз?

Или для вас любой, кто не орёт на каждом углу «ЛИСП НЕ НУЖЕН!!!» является пациентом?

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

чтоб получить убогое нечитаемое решение типа LISP'ового варианта

в данной задаче лисповое решение как раз-таки более человекочитабельное, в отличие от перловского, ибо более декларативно.

например «while <FILE>» — что это значит? (я-то понял, т.к. лисповая версия была предварительно представлена архимагом =), но какова смысловая нагрузка этих <>? почему не просто что-то вроде «while not eof(FILE)» ?

«unless /^192\.168/;» — аналогичный вопрос.

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

Уважаемый анонимный тёзка! Лисп служит тем же целям, что и золото-бриллианты. Практической пользы от них нет, но зато сколько понтов это даёт!

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

>LISP
Это который на IBM 704 у Маккарти работал?
Ну, его действительно сложно представить как панацею от всех проблем.

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

> Кстати, полной программы на LISP мы так и не увидели...

полной программы чего? сканирования апачевского лога? так это и была полная программа, да...

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

о, тут и анонимусу про аналогии с n^0 и 0! есть. ну вообще шик, как специально под флейм написали

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

>П(А⨯....⨯А)→А есмъ чё? Это оператор, который на входе берёт прямое произведение множества и выполняет последовательно отображения пар элементов, где результат предыдущего отображения становится элементом следующего отобажения.

Мужик, отсыпь.

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

это какой-то громоздкий perl ;)
и ошибка open не обрабатывается.

sub count {
open my $fh, '<', '/var/log/apache2/access_log'
or return undef;
scalar grep /^192\.168/, <$fh>;
}

как здесь код правильно вставить??? чтобы с отступами.

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

>Ada для задач системного программирования и Common Lisp для всего остального. Такая ниша вас устраивает?

Т.е. вы всё-таки считаете, что переписать mplayer с кодеками на lisp - хорошая идея? Или, скажем, webkit, или, скажем, poppler?

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

Хм... Я писал на перле и понял все предыдущие примеры. Что гуглить чтобы понять этот? :)

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

> Опять CL против всех? Выберите язык и займёмся сравнением. А то на большинство задач вы сможете выбрать специализированный язык для решения этой задачи.

Какой-то там смысл в лиспе можно найти *только* в том случае, если лисп будет использоваться для метапрограммирования,

т.е. именно CL против *всех* специализированных языков сразу.

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

>в данной задаче лисповое решение как раз-таки более человекочитабельное

Это вопрос личного предпочтения. Точнее, у кого на что больше мозг «заточен». Мне, например, как perl'овщику, моё решение куда более читабельнее и понятнее lisp'ового. LISP'ерам - наоборот. Тут ничего удивиьельного.

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

> Или вы серьёзно думаете, что, переписав, например nginx или apache

на lisp сделаете доброе дело для человечества


Во-первых, ни apache, ни тем более nginx не является сервером приложений.
Во-вторых, у меня есть план в этом году форкнуть hunchentoot, перейти на iolib и реализовать taskmaster в стиле nginx (на основе epoll), это работы недели на две. Так вот, после этого hunchentoot вполне сможет состязаться с nginx даже в отдаче статики, ну а уж итоговые приложения на CL... ну сами догадайтесь.
В-третьих, да, я думаю, что когда я пишу open-source код я в любом случае делаю доброе дело для человечества.

А что хорошего для человечества делаете вы?

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

Ранее объяснили лисперы, что Микрософт сделала Диез, а не Лисп, потому что очень нужна бала копия именно Жабы и боялись «входного порога». Гугл придумал свой Go и тоже не на основе Лиспа. Да шо же такое-то?

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

>> Это вопрос личного предпочтения.

Данный анонимус более вменяем, чем другой ;)

Я тот же самый анонимус. Перефразирую, если не понятна идея: оригинальный стиль, что я привёл в сколько там 5-7 строчек по-моему выглядит читабельнее независимо от синтаксиса perl или LISP, но если человеку нравится всё «ужимать», то можно сделать и на perl 3 строчки (или 2, как idle).
Это вообще был коммент на высказывание archimag'а что мол perl сливает, т.к. строчек больше. А тут не только в количестве строк дело по-моему.

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

> Это вопрос личного предпочтения. Точнее, у кого на что больше мозг «заточен». Мне, например, как perl'овщику, моё решение куда более читабельнее и понятнее lisp'ового. LISP'ерам - наоборот. Тут ничего удивиьельного.

в данном случае не только в этом дело, но еще и в большей «литературности», что ли, лиспового примера

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

Я прекрасно помню как один из анонимусов утверждал, что вариант на perl'е читаемее, независимо от человека.

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

> Я прекрасно помню как один из анонимусов утверждал, что вариант на perl'е читаемее, независимо от человека.

ну-у... для интерпретатора перла вариант на перле действительно читаемее независимо от человека =)

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

>Есть что LISP'у противопоставить этому? Чтоб прям из bash и в одну строчку?

Какой глупый анонимус. Иди, пофапай на HQ9+ - ни одному языку не сравниться с HQ9+ в написании хелловорлдов и квайнов.

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

Микрософт лиспа не сделала себе, сделала С♯. Гугель Лиспа не сделал, сделал Go. Оракл захапал Жабу. Лиспа нема.

Нокия развивает Qt для С++.

Мой Фирефокс и Линух, откудова я пишу, Лисп не знают вообще, С и С++, Перл и т.п. KDE GNOME та же фигня. Офисы, 1С и т.п. тож самое.

И хде Лисп? Маргинальный язык для нескольких малоизвесных проектов. Но лисперы не унывают. Лисперы полны оптимизма, 50 лет их не сломило, а только укрепило в борьбе под программным солнцем. Они верят в своё лисповое щастье.

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

Литературность, говоришь, ну давай сравним:

[code=perl]
#открыть ФАЙЛ такой-то
open (FILE, '/var/log/apache2/access_log');
#пока есть что в ФАЙЛе
while (<FILE>) {
#увеличим I, если строчка не начинается с того-то
$i++ unless /^192\.168/;
}
#закрываем ФАЙЛ
close FILE;
#возвращаем I
return $i;
[/code]


[code=lisp]
#итератор по строкам в файле хз-что-то используя хз-что-то читать строки
(iter (for line in-file #P"/var/log/apache2/access_log" using #'read-line)
# если не перл-регексп-скан начинается с того-то строка
(unless (ppcre:scan «^192\\.168.*» line)
#считать строки
(count line)))
#вернуть хз-что, закрыть файл хз-где
[/code]

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

Модеры, удалите мой пост сверху, пожалуйста.

Литературность, говоришь, ну давай сравним:

#открыть ФАЙЛ такой-то
open (FILE, '/var/log/apache2/access_log');
#пока есть что в ФАЙЛе
while (<FILE>) {
#увеличим I, если строчка не начинается с того-то
$i++ unless /^192\.168/;
}
#закрываем ФАЙЛ
close FILE;
#возвращаем I
return $i;
#итератор по строкам в файле хз-что-то используя хз-что-то читать строки
(iter (for line in-file #P"/var/log/apache2/access_log" using #'read-line)
# если не перл-регексп-скан начинается с того-то строка
(unless (ppcre:scan "^192\\.168.*" line)
#считать строки
(count line)))
#вернуть хз-что, закрыть файл хз-где
anonymous
()
Ответ на: комментарий от anonymous

Не, вы батенька читать не умеет совсем, надо так:

;; для каждой строки в фале /var/log/apache2/access_log
(iter (for line in-file #P"/var/log/apache2/access_log" using #'read-line)
   ;; которая, начинаюся не с 192.168
  (unless (ppcre:scan "^192\\.168.*" line) 
          ;; увеличить значение счётчика 
          (count line))) ;; вернуть значение счётчика
archimag ★★★
()
Ответ на: комментарий от anonymous

> Т.е. вы всё-таки считаете, что переписать mplayer с кодеками на lisp

- хорошая идея? Или, скажем, webkit, или, скажем, poppler?


Вы в каком плане спрашиваете? Если в чисто практическом, то они кажутся уже есть и работают, смысл? (правда, касательно webkit - броузер на CL уже есть). А если просто чисто теоретически, чем бы стоило заняться в вечности - то почему нет? особенно в части poppler ;)

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

не перегибай =)

while (<FILE>)

-- читается как «пока файл» никакого намека на

есть что в ФАЙЛе

ну да ладно.

#увеличим I, если _строчка_ не начинается с того-то

в

$i++ unless /^192\.168/;

никакого намека на _строчку_

и да, где инициализация i? т.е. для неподготовленного читателя может быть понятно, что раз она не задана явно, то перл её сам инициализирует. но где гарантия, что читающий догадается правильно? и зачем вообще читающему об этом задумываться? а задумываться приходится =)

archimage

;; увеличить значение счётчика

;; вернуть значение счётчика

правильней просто «сосчитать строки» =)

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

>Не, вы батенька читать не умеет совсем, надо так:
Приписать красивых комментов все умею, а я же читал код дословно. И perl получился куда более читабельным на нормальном человеческом языке, не травмированным LISP'ом.

Вы в каком плане спрашиваете?

В том, что Вы сказали LISP создан для всего несистемного программирования. Я и привёл пару примеров, где по-моему LISP для этого совсем не годится.

anonymous
()
Ответ на: комментарий от anonymous
#открыть ФАЙЛ такой-то 
open (FILE, '/var/log/apache2/access_log'); 
#пока хз-что ФАЙЛ хз-что
while (<FILE>) { 
#увеличим i, если не хз-какой-то регексп
$i++ unless /^192\.168/; 
} 
#закрываем ФАЙЛ 
close FILE; 
#возвращаем i 
return $i;

Где тут строки я вообще не заметил.

; для каждой строки в файле таком-то используя функцию читать строки 
(iter (for line in-file #P"/var/log/apache2/access_log" using #'read-line) 
; если не содержится регексп в данной строке
(unless (ppcre:scan "^192\\.168.*" line) 
; посчитать строку
(count line)))

Возвращается значение, посчитанное во внешней функции (iter, которая на самом деле макрос), закрывать файл не надо, ибо не открывали. т.е. открывали, но не мы.

Всё-таки один из анонимусов более вменяем.

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

> Я и привёл пару примеров, где по-моему

LISP для этого совсем не годится.


Если отбросить mplayer (писать который на CL пожалуй ещё рановато), то на основании чего вы сделали такой вывод?

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

> Если отбросить mplayer (писать который на CL пожалуй ещё рановато), то на основании чего вы сделали такой вывод?

Неправильно. :) Вот так надо:

Анонимус, приведите пример, где на переписывание просмотрщика html или pdf с Лиспа на что-то другое понадобилось меньше времени, чем на первоначальную разработку.

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

Вообщем, в очередной раз потвердилось, что как только размер программы на Perl начинаю превышать одну строку, то решение проблемы из категории простых резко перемещается в категорию возможных ;)

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

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

А для таких задачек админа подойдёт bash и все это прекрасно знают
cat xxx | grep xxx | wc -l

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

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

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

Синтаксические понты - это точно не про лисп =)

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

А для таких задачек админа подойдёт bash и все это прекрасно знают

cat xxx | grep xxx | wc -l

Админ - лох, ибо grep -c xxx yyy

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

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

Вы хотите сказать для крупных админских скриптов?

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

> Синтаксические понты - это точно не про лисп =)

+1, в баше, да и в C с перлами, питонами, рубями и джавами синтаксических понтов больше в [10..100] раз =)

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

А где тут функциональное программирование? Это чистая последовательная императивщина. Могём написать функционально, шобы все плюсанутые задроты типа меня похлядели на ето и спились от зависти?

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

> Синтаксические понты - это точно не про лисп =)

угу, а теперь сосчитаем количество страшных слов в lisp варианте отсюда: http://www.linux.org.ru/view-message.jsp?msgid=4513948&lastmod=1265233182314&...

в лиспе: iter, for, in-file, #P, using, #', unless, ppcre:scan в перле: open, while, unless, close

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

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

> А где тут функциональное программирование? Это чистая последовательная императивщина. Могём написать функционально, шобы все плюсанутые задроты типа меня похлядели на ето и спились от зависти?

как же вы зае^W^W^W^Wа при чем тут функциональное программирование?

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

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

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

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