LINUX.ORG.RU
ФорумTalks

Perl vs lisp^H^H^H^Hugoday


0

0

Продолжим? Так вот, вопрос первый - я хочу увидеть регулярные выражения в лиспе. Я не говорю, что их нет - я хочу знать, как это _выглядит_. Вопрос второй - что такое (3 . 5)? Точечная пара из двух символов '3' и '5'? Дробь 3/5? Комплексное число 3+5i? Мантисса и порядок вещественного числа?


> Вопрос второй - что такое (3 . 5)?

это композиция функций 3 и 5 :)

Pi ★★★★★
()

CL-PPCRE is a portable regular expression library for Common Lisp.
CL-PPCRE is more compatible with the regex semantics of Perl 5.8.0
CL-PPCRE is faster than Perl in 1511 of 1545 cases - in 1045 cases it's more than twice as fast.

Sun-ch
()
Ответ на: комментарий от Sun-ch

Вы мне код покажите! Что до быстроты... Мне всегда производительности Perl хватало. Что до данной конкретной быстроты - ничего не скажу. Скажу, что есть люди, мастера делать тесты с заданными результатами. Что такое 1545 cases? Это что, количество всех возможных типов регулярных выражений?

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

Перекодировка 8-битной строки в quoted-printable

(let ((qp-regex (cl-ppcre:create-scanner "[\\x80-\\xff]"))) (defun encode-quoted-printable (string) (flet ((convert (target-string start end match-start match-end reg-starts reg-ends) (declare (ignore start end match-end reg-starts reg-ends)) (format nil "=~2,'0x" (char-code (char target-string match-start))))) (cl-ppcre:regex-replace-all qp-regex string #'convert))))

Sun-ch
()
Ответ на: комментарий от Eldhenn

Или на awk, или ещё на чём-нибудь, похожем на человека.

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

На Perl я попросил, чтобы понять, что это такое. И оценить сравнительное удобство. Я тоже могу привести строчку на perl... даже не привести, а процитировать (известную) - кто её поймёт?

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

Пока что я не увидел особой крутости лиспа. Ну разве что польская нотация и круглые скобочки кого-то доводят до экстаза...

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

> На Perl я попросил, чтобы понять, что это такое.

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

> а процитировать (известную) - кто её поймёт?

Я пойму, если документацию почитаю. Ежели б я её просил - полез бы и почитал.

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

Ну заменяются все символы в строке из диапазона 0х80-0хff на выражения вида =F8 или =DF

Sun-ch
()
Ответ на: комментарий от Eldhenn

> Пока что я не увидел особой крутости лиспа.

Ещё бы! Ты ведь даже понять не можешь, что там написано.

> разве что польская нотация и круглые скобочки кого-то доводят до экстаза...

Нет там польской нотации. А со скобочками всё нормально.

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

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

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

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

Пойми - синтаксис и семантика Лиспа могут быть вообще любыми. Так что не нравятся скобочки - убери скобочки, никто не запрещает.

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

> Это неспортивно, ты код с regexp покажи.

Нет Саныч! При всем уважении - именно это спортивно! Быстро дешево и сердито. Не заморачиваясь! А как только мне понадобится быстрая шустрая вариация сего действа я это на ансишном си накрошу. И будет в дохренадцать раз шустрее.

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

If compiled with CMUCL it outperforms Perl's highly optimized regex engine (written in C) which to my knowledge is faster than most other regex engines around. If compiled with CLISP it is still comparable to CLISP's own regex implementation which is also written in C.

Попробуй, напиши быстрее, чем Perl's regex engine :)))))

Вообще смысл треда, товарищ попросил показать как используются regex,

ему показали.

Sun-ch
()
Ответ на: комментарий от Eldhenn

Это возможность, которая обязана быть в любой реализации ANSI Common Lisp. Для этого достаточно наличия конструкции defmacro, ну а для облегчения жизни есть ещё и set-macro-character всякие - дабы не переписывать парсер с нуля, а просто расширить существующий.

anonymous
()

Санычу.
$res=~s/([^\t\n!"#\$%&'()*+,\-.\/0-9:;<>?\@A-Z[\\\]^_`a-z{|}~])/s printf("=%02X", ord($1))/eg;
(только для ASCII, то есть 7 бит)

Единственное что - в левой части не поддерживаются вычисления. Можно правда попробовать
$pattern=join '', map {chr($_)} (0x80..0xFF);
$res=~s/([$pattern])/sprintf(ord($1))/eg;

Eldhenn
() автор топика
Ответ на: комментарий от Sun-ch

> Попробуй, напиши быстрее, чем Perl's regex engine :)))))

Ключевое слово (written in C) ;) Имеется ввиду что перловый regexp быстрее самопальных домашних regexp имплементаций (ясный перец сколько лет они с него пылинки сдувают, такое за часик не напишешь). Но если это поделие ничего кроме конвертирования строк не умеет, то тут оно полюбому шурше будет.

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

Но по выражению г-на ugoday это "костыли". Кстати, докажите мне, что приведёные санычем рег. выражения - не костыли.

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

> Увидел я как они используются. Вывод - это ужасно.

Ужаc смотреть тут. http://www.regular-expressions.info/

А вообще это очень правильный способ избавится от кучи циклов условий и лишних хэшей.

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

> Кстати, докажите мне, что приведёные санычем рег. выражения - не костыли.

Интересно. А если тебе доказать что жизнь - дерьмо ты выпьеш йаду ?

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

Не нравятся эти - есть другой пакет

REGEX contains a full-featured regular expression compiler and matching engine. If you're one of those who believe that Lisp is slow, note that this regex engine is roughly 5x-20x times faster than the GNU regex matcher (which is obviously written in C).

^ matches the start of a string.
$ matches the end of a string.
[...] denotes a character class.
[^...] denotes a negated character class.
[:...:] denotes a special character class.

* [:alpha:] == [A-Za-z]
* [:upper:] == [A-Z]
* [:lower:] == [a-z]
* [:digit:] == [0-9]
* [:alnum:] == [A-Za-z0-9]
* [:xdigit:] == [A-Fa-f0-9] и тд.

Чё то знакомое не правда ли?

Sun-ch
()
Ответ на: комментарий от Sun-ch

Уже лучше. Убедили - Lisp может быть ненамного хуже перла :)

Eldhenn
() автор топика
Ответ на: комментарий от Sun-ch

Э? А упомянутые тут макросы (или что там), расширяющие lisp - не костыли? Простите, а чем в общем случае костыли отличаются от некостылей? Религиозной принадлежностью оценивающего?

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

С помощью макросов можно реализовать абстракции произвольного уровня.

Перл до такой степени не расширяем.

Sun-ch
()
Ответ на: комментарий от Sun-ch

А оно надо? Ваши "абстракции произвольного уровня"? Собственно, классы+перегрузка операций - и вот в язык добавляется всё, что угодно. Ну а если вспомнить шаблоны в C++ - так совсем замечательно становится. Можно таких абстракций наделать, что Perl с его поэзией и неочевидностью будет только охать и ахать.

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

> Гм? Вообще-то я к тому, что г-н ugoday утверждал, что в Perl всё делается костылями, а в Lisp - без.

Джыгыт! И с деревянным кынжалом Джыгыт! (С) Четыре поляка грузин и собака

Какая тебе разница ?

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

Ну сделай мне язык описания конечных автоматов. Быстрый, эффективный. И чтоб можно было запросто генерацию из Dia И ОБРАТНО прикрутить.

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

> А упомянутые тут макросы (или что там), расширяющие lisp - не костыли?

ты хотя бы что-нибудь про lisp прочитай, а потом открывай ротик, лады?

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

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

Ну если ты Александреску до конца дочитал и что-нибудь там понял, то конечно :))

Но в лиспе многие вещи делаются куда проще.

Sun-ch
()
Ответ на: комментарий от Eldhenn

Естественно. Он же будет в нейтив компилять. Тебе не придётся писать тормозной интерптетатор на каждый маленький язычок, который ты делаешь - у тебя есть сразу доступ к эффективному компилятору.

Ты завязывай ламерить, ок? Почитай хоть что либо, прежде чем флейм разводить.

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

Ах, ну да. Человек, который не является кул-хасклем, по определению ламер. Я забыл совсем...
Маленький вопрос. Почему тогда есть ещё какие-то языки, кроме Lisp? Только потому, что не всем открылось Откровение?

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

> Человек, который не является кул-хасклем, по определению ламер.

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

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

> это человек, который рвётся обсуждать то, о чём не имеет ни малейшего понятия

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

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

> потому что он сложный, обезьянкам не выучить.

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

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

Да сколько можно повторять? Технические характеристики языка никого не волнуют. Просто он не стал модным - его среди быдла не распиарили. Жабу - распиарили, Си - распиарили, даже паскакаль - и тот распиарили.

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

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

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

Фигнаны. Прост он, как грабли. Выучить его до приемлимого уровня можно гораздо быстрее, чем ту же Жабу. Но откуда простому быдлокодеру об этом узнать? В глянцевых журналах об этом не пишут, на job.ru не поминают, преподы в быдлоВУЗах и слов таких не слышали.

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

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

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