LINUX.ORG.RU

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


2

2

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

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

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

★★

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

Поймите, что П([])=1 и n^0=1 совсем разные вещи.

0 не пустое множество. Это действительное число. n^0 это действительное число в рациональной степени 0, они оба являются элементами поля действительных чисел. Непустое множество подмножеств из 2 элементов вида (n, 0) отображается в единичный элемент.

П([]) имеет дело с пустым множеством. Это некое отображение подмножеств множества, в котором образом пустого подмножества является единичный элемент множества.

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

> CL против всех? Выберите лучше задание для ЯП общего назначения. Это что на перле, что на awk в одну строчку решается.

ну можно сравнить на «читабельность» строки регекспов перла и cl-ppcre, если речь об этом (или они будут одинаково выглядеть?) а также произво дительность =) в PCL же писалось, что компилятор регекспов в cl-ppcre лучше перловского. впрочем может эта информация уже не актуальна? =)

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

>Поймите, что П([])=1 и n^0=1 совсем разные вещи.

Ну и что? Я не говорил, что это одно и то же. Я не пойму, к чему ты это все тут пишешь?

Ты не согласен, что П([])=1? Ты не согласен с тем свойством, которым должен обладать П?

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

> вы же вебщик, знаете что это такое

Я apache только в корпоративной среде юзаю, из-за mod_kerb_auth, а на lisper.ru скажем чистый hunchentoot выставлен, без всяких там, ну да ладно, не суть.

Я на перле, вы на CL. Готовы?


Да. Что будет, одна строк против трёх? ;)

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

>Канонiчнымъ явяляется определение сперва натурального логарифма, а потом соответствующей экспоненты.

логарифм - это показатель степени.

Но самое главное, анон, втф?

ну, типа a^0 = 1, а П nil = 1*1*nil, но это не равно еденице, иначе надо будет чтобы (= 1 nil) => T.

при чем тут это вообще?

вот действительно, чего школота с таблицей умножения в девелопменте забыла?

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

А давайте лучше так - у нас есть апачевый access-лог (вы же вебщик, знаете что это такое), из которого нужно посчитать количество нелокальных запросов (не из 192.186*). Я на перле, вы на CL. Готовы?

Ъ-энтерпрайз задача, на которой есть, где развернуться, размять мозг!

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

>логарифм - это показатель степени.

Канонiчно натуральный логарифм определяют как интеграл 1/x.

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

Да ни чё страшного, на CL это три строки, мне вот просто интересно посмотреть на решение на Perl.

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

>CL против всех? Выберите лучше задание для ЯП общего назначения.
Только против тех, что я знаю :-) Я выбрал этот пример из-за того, что на днях его писал.

Это что на перле, что на awk в одну строчку решается.

О чём и речь. На перле одна строка, прям из bash. Мне просто интересно как оно на LISP будет выглядеть.

Или давайте вы на любимом и ранее предложенном C, а мы - на CL.

Ну да, я знаю С и знаю, что на С будет куда длиннее, чем на перл (и, вероятно на LISP тоже). Но этож не значит что мне хватит глупости всё писать на С. Я не сторонник такого универсального подхода всё на одном языке. У С своя довольно прочная и неопровержимая ниша. Или вы хотите, скажем, mplayer с кодеками переписать на LISP?

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

>Ъ-энтерпрайз задача, на которой есть, где развернуться, размять мозг!

А предложенная выше по-вашему реально сложная и Ъ-энтерпрайз задача? Тогда мне вас жаль...

Давайте просто, нужно пройтись по всем узла дерева, содержащим некий атрибут, и изменить его значение на тупое «Hello world»?

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

> Но этож не значит что мне хватит глупости всё писать на С.

Зачем тогда заставляете лисперов *всё* писа̀ть на Лисп?

(когда уже в ЛОРе появится textile?)

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

Мне просто интересно как оно на LISP будет выглядеть.

Пожалуйста, мне не жалко:

(iter (for line in-file #P"/var/log/apache2/access_log" using #'read-line)
      (unless (ppcre:scan "^192\\.168.*" line)
        (count line)))
archimag ★★★
()
Ответ на: комментарий от naryl

>Для доказания чего?

для доказательства экономической целесобразности и конкурентноспособности лиспа по сравнению с другими инструментами в каждой нише.

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

a^b есть g:A⨯A→A или в рассматриваемом случае g:(n, 0)→А

Пⁿ() есть h:A⨯....⨯Аⁿ→А или в рассматриваемом случае h:∅→А

Где тут аналогия непонятно

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

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

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

> в каждой нише.

кто будет составлять список ниш?

предлагаю задание: написать робота, который будет составлять список ниш и ранжировать их по уровню автоматизированности. источник получения знаний — интернет. не самый лучший источник, но других вроде нет, если есть — предлагайте =) ну можно еще помимо ранжирования реализовать возможность предоставления рекомендаций по автоматизации слабоавтоматизированных областей. как вариант с подбором наиболее оптимальных средств автоматизации =)

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

И куда делся анонимус с перлом? Блин, предлагают парсить XML и тут же отказываются, предлагают парсить апачевский лог и снова бегут, ну что за народ? ;)

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

> И куда делся анонимус с перлом? Блин, предлагают парсить XML и тут же отказываются, предлагают парсить апачевский лог и снова бегут, ну что за народ? ;)

побежал парсить доки по перлу, чтобы понять как парсить на перле, чтобы распарсить доки по перлу, чтобы...

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

Подскажите, пожалуйста, а что в Вашем коде на Лиспе есть такое специфическое, что выделяет Лисп особо?

Это делается элементарно на Перле, Руби, Питоне, Жабе.

Это делается элементарно на С и С++ использованием библиотеки с регулярными выражениями (нижнприведенная программа это вообще уровень школьников):

#include "my_regexp.h" // или там какой-нибудь #include <boost/regex.hpp> 
#include "Vasya.h" 
...................
ifstream ifile("/var/log/apache2/access_log");
while(getline(ifile, s)) 
{ 
    if (my_rexexp_search(s, "бла бла бла"))
        ++count;
    if (Vasya_asked_it(s))
        ++Vasya;
}

И так далее. Где многократные приемущества Лиспа над Жабами, Руби, Перлами и т.п. хренью? Если надо админу написать за 2 минуты скрипт, то Перл и прочее скриптовое самое то, если большой проект, то вышеприведённый текст с кучей наворотов. Как Лисп даст сократить кол-во програмеров в разы?

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

Сейчас последует стандартный ответ, что у анонимусов есть дела важнее, чем круглосуточно следить за комментами на ЛОРе.

А может просто ушёл учить perl или искать знакомого perl-хакера. ;)

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

> Подскажите, пожалуйста, а что в Вашем коде на Лиспе есть такое специфическое, что выделяет Лисп особо?

Ничего.

Это делается элементарно на Перле, Руби, Питоне, Жабе.


Да.

Это делается элементарно на С и С++ использованием библиотеки с регулярными выражениями (нижнприведенная программа это вообще уровень школьников):


Да.

Где многократные приемущества Лиспа над Жабами, Руби, Перлами и т.п. хренью?


На примере этой задачи? Нигде.

Как Лисп даст сократить кол-во програмеров в разы?


Для написания трёхстрочного скрипта? Никак. Достаточно одного.

Кстати, почему вы отказались от перла?

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

А ХМЛ что тут Лисп даст? Куча библиотек, такое тупое считывание-запись, заворачивание всего этого дела в функцию уже своей спец библиотеки и забывание про её внутренности. Продолжение другой работы надо проектом.

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

>Кстати, почему вы отказались от перла? Вы понимате в чём дело... Анонимусов может быть 2, 3, 10. Я анонимус с С++, а не анонимус с перлом.

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

> А ХМЛ что тут Лисп даст? Куча библиотек, такое тупое считывание-запись, заворачивание всего этого дела в функцию уже своей спец библиотеки и забывание про её внутренности. Продолжение другой работы надо проектом.

А почему вы считаете, что Лисп хуже для обработки XML? Приведите примеры, где проект на Лисп для обработки XML оказался намного сложнее в поддержке и дольше в разработке, чем аналогичный на другом языке.

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

ХМЛ это не цель, а средство. Цель - проект, за который платят бабло. И в таком проекте ХМЛ и т.п. мусор - копеечная проблема, которую напишет для тренировки новый сотрудник, что бы въехать плавно в проект.

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

Пожалуйста:

#!/usr/bin/perl

sub count {
	open (FILE, '/var/log/apache2/access_log');
	while (<FILE>) {
		$i++ unless /^192\.168/;
	}
	close FILE;
	return $i;
}

print count();

А вот как оно выглядит, используя «некоторые специфичные трюки»:

perl -ne '$i++ unless /^192\.168/; END {print $i}' /var/log/apache2/access_log

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

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

а что за Vasya.h ? а то без него (видимо) мне не понятна смысловая нагрузка инкрементации count и Vasya

кучи наворотов в вышеприведенном тексте не видно, только уродливые и лишние для «программы» подробности вроде этих счетчиков... =)

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

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

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

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

sed, awk, grep - на выбор :)

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

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

какой глубокий вывод из комментария анонимуса на ЛОР

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

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

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

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

> perl -ne '$i++ unless /^192\.168/; END {print $i}' /var/log/apache2/access_log

sbcl -s /path/to/archimage\'s-apache-log-program.cl

как-то так? =)))

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

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

sed, awk, grep - на выбор :)

Мы про LISP говорим, sed, awk - это всё из perl-песочницы.

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

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

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

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

да вроде почти любая реализация Scheme умеет что-то вроде

<implementation> -e '<scheme-code>'

неговоря уж о scsh

про CL в этом отношении ничего не скажу

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

Поймите, что П([])=1 и n^0=1 совсем разные вещи.

я там выше писал, как n^x можно определить через П

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

почему некое? оно вполне себе определённое

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

Покажите на человека, подавшего Лисп как утилиту с командным интерфейсом и мы вместе над ним посмеёмся.

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

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

Я его привёл, переставьте строчки (чтоб получить убогое нечитаемое решение типа LISP'ового варианта) - получите 3 строчки:

{open (FILE, '/var/log/apache2/access_log'); 
   while (<FILE>) {$i++ unless /^192\.168/} 
   close FILE && return $i;}

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

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

П(a, b, c, d) есть ((a*b)*c)*d)

П(a, b, c) есть (a*b)*c)

П(a) определим как a

П(∅) определим как единичный элемент абелевой группы, ежели имеем дело с алгеброй. Дабы не облажаться с умножением пустых множеств из-за ассоциативности операции умножения.

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

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

Где??? Покажите одного.

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

>да вроде почти любая реализация Scheme умеет что-то вроде

<implementation> -e '<scheme-code>'


Ну дык приведите его тут, вместе посмеёмся

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

Ну т.е. без специфичных особенностей Perl, специально заточенных под однострочные решения, Perl проигрывает CL даже в обработке текста? Ну да я это и так давно знаю.

Есть что LISP'у противопоставить этому?

Чтоб прям из bash и в одну строчку?



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

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

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

Где??? Покажите одного.

archimag

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

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

Поддерживаю анонимного оратора.

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

>Ну т.е. без специфичных особенностей Perl, специально заточенных под однострочные решения, Perl проигрывает CL даже в обработке текста? Ну да я это и так давно знаю.
Видать плохие у Вас знания. Или опять решили исказить очевидные факты?
Кстати, полной программы на LISP мы так и не увидели...

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

>Common Lisp хорош для серверов приложений,

ЛОР когда перепишут на Лиспе?

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