March 2026

S M T W T F S
12 34567
891011121314
151617 18192021
22232425262728
293031    

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Thursday, May 5th, 2005 12:10 am
Левенчук пишет, что все серьёзные программисты мечтают программировать на фукнциональных языках. Не знаю, как серьёзные, а у меня лично никогда желания программировать на Лиспе не возникало. Нечеловеческий он какой-то. Пусть ворлоны на нём программируют.
Tags:
Friday, May 6th, 2005 04:51 pm (UTC)
вот отличный (а также модерновый и практический, что приятно) текст:
http://www.gigamonkeys.com/book/
Friday, May 6th, 2005 05:02 pm (UTC)
да, и ещё, дабы мне не ощущать себя в настолько идиоцком положении: моей целью в данном треде не являлось кому-либо что-либо продать или кого-либо в чём-либо убедить и направить на путь истинный.
миссионерства я зело не люблю, и считаю что покуда человека изнутри не припекло, морочить ему голову совершенно не нужно и даже бесполезно.
так, зашёл на огонёк, указал на фактические ошибки в посте, а тут ксендзы подтянулись... :)
Friday, May 6th, 2005 05:12 pm (UTC)
Основная идея Лиспа в том, что списки одновременно являются и абстрактным синтаксическим деревом самого Лиспа - то есть, программа по сути неотличима от данных.

Это позволяет нам расширять язык, используя функции, выполняющиеся во время компиляции - то есть, макры.

К примеру, если мы хотим ввести в язык новую конструкцию
APPRIGHT, такую, что код

(APPRIGHT + 1 2 3 4 5) будет компилироваться как
(+ 1 (+ 2 (+ 3 (+ 4 5)))), то мы просто говорим:

(defmacro appright (f &rest args)
(if (null (cdr args)) `(car args)
`(,f ,(car args) (appright ,f ,@(cdr args)))
))

То есть - мы расширяем сам *компилятор* языка. Не нравятся скобочки? Можем заменить синтаксис - см. мою статью, там, правда, Схема, но это без разницы, если кому интересно, дам то же самое для CL.
Friday, May 6th, 2005 07:36 pm (UTC)
В какой статье? Покажи плз пример замены синтаксиса для лиспа.
Friday, May 6th, 2005 10:55 pm (UTC)
В этом треде уже давал ссылку.

Пример (действующий) - http://dslengine.sourceforge.net/
Friday, May 6th, 2005 11:03 pm (UTC)
> через его синтаксис надо продираться.

Не надо. У Лиспа - минимальный синтаксис. S-выражения. Это, с одной стороны, плохо - человекам, или некоторым из них, сложно воспринимать S-выражения или
тот же XML, но с другой стороны это замечательно, потому как синтаксис совпадает с AST языка. Мы видим ровно то, что у него внутри, уже распарсенное.

> Ну, так почему не поменяли, а?

Да поменяли - к примеру, RLisp, весьма известная фишка... Просто это никому не надо - синтаксис S-выражений, на самом деле, близок к идеальному. Это я утверждаю, как полиглот, программировавший практически на всех языках, какие только когда либо существовали, и собственноручно реализовавший множество языков под разные цели. Да, синтаксис того же Хаскелля может завораживать, казаться немерянно удобочитаемым и красивым, синтаксис Java может быть привычным, но по сумме критериев S-выражения лидируют.

> Почему вы не написали тот же appright в более человекопонятной форме?

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

> Но в целом, мне кажется, я уловил вашу мысль - что в Лиспе правила, по которым ведётся разбор выражений на языке, поддаются модификации. Вернее, думаю, всё же расширению?

Не только разбор. Ещё и все этапы компиляции и оптимизации. Изменять (не только расширять, но и ограничивать) можно абсолютно всё.

> И что среда исполнения Лисп включает в себя компилятор и исполнитель кода (что, понятно, не есть уникальное свойство Лиспа).

Не совсем так. Компилятор Лиспа включает в себя среду исполнения. Обратное не обязательно (ну да, есть любители попользовать eval, но я не из их числа).
Friday, May 6th, 2005 11:34 pm (UTC)
> Если язык Лисп-VM не скрывает сложности этой самой VM, так ли это хорошо?

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

> Или вы скажете, что существует синтаксис, идеальный для описания - чего угодно?

Существует синтаксис, *достаточный* для описания чего угодно. Это - S-выражения. Аналог, ужасно громоздкий и нелепый, но столь же универсальный - XML. Не знаю, на фига XML придумали, когда были S-выражения, ну да ладно...

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

> А какие, опять же, критерии-то?

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

- Ортогональность. Не должно быть взаимозаменяемых элементов.

- Минимальность. Лишние элементы только отвлекают.

- Возможности для редактора или IDE проявить немерянный интеллект. Для S-выражений их - полно, для сложных синтаксисов - приходится bovinator-ы всякие рисовать - кошмар...

- Однозначность отображения на внутреннее представление. S-выражения тривиально переводятся в двоичные деревья, и наоборот.


Sunday, May 8th, 2005 08:33 am (UTC)
> Человеком XML воспринимается проще, мне кажется.

человеком с привычкой к HTML'ю, натурально.

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

<+ 1 <* 3 4/>/>

<смайлик direction="left" nosy="false"/>
Sunday, May 8th, 2005 09:20 am (UTC)
а.
я думал, ты с HTML/XML сравниваешь, а они тоже префиксные.

на алгебраическую нотацию таки ни то ни другое не похоже, это да.
Sunday, May 8th, 2005 10:31 am (UTC)
> XML немного больше похож на текст

каким образом, интересно?
там же пунктуационного шума больше в несколько раз.

(no subject)

[identity profile] cmm.livejournal.com - 2005-05-08 11:11 am (UTC) - Expand

(no subject)

[identity profile] cmm.livejournal.com - 2005-05-08 11:22 am (UTC) - Expand

(no subject)

[identity profile] cmm.livejournal.com - 2005-05-08 11:42 am (UTC) - Expand

(no subject)

[identity profile] cmm.livejournal.com - 2005-05-08 12:23 pm (UTC) - Expand

(no subject)

[identity profile] cmm.livejournal.com - 2005-05-10 05:48 pm (UTC) - Expand

(no subject)

[identity profile] cmm.livejournal.com - 2005-05-10 06:29 pm (UTC) - Expand

(no subject)

[identity profile] mauhuur.livejournal.com - 2005-05-09 06:46 pm (UTC) - Expand

(no subject)

[identity profile] mauhuur.livejournal.com - 2005-05-10 10:09 am (UTC) - Expand

(no subject)

[identity profile] mauhuur.livejournal.com - 2005-05-10 11:33 am (UTC) - Expand

(no subject)

[identity profile] mauhuur.livejournal.com - 2005-05-09 06:44 pm (UTC) - Expand

(no subject)

[identity profile] cmm.livejournal.com - 2005-05-08 11:19 am (UTC) - Expand

(no subject)

[identity profile] cmm.livejournal.com - 2005-05-08 11:32 am (UTC) - Expand
Monday, May 9th, 2005 06:41 pm (UTC)
> Человеком XML воспринимается проще, мне кажется.

Это не так. В XML синтаксические элементы скрывают смысл, читать глазами
даже с подсветкой просто невозможно.

> Очевидно, дело привычки, хотя выражения вида (+ 1 (* 3 4)) мне не кажутся естественными.

А мне - кажутся. Не надо напрягаться и думать над приоритетами операций.
Кроме того, никто не запрещает писать и инфиксно, всё равно это останутся S-выражения:

http://www.cliki.net/infix
Tuesday, May 10th, 2005 11:26 am (UTC)
> Нет, не скрывают, а проясняют, и читать гораздо проще, чем лисповский labirynth of parentheses, all alike.


Чушь и полный бред. Учитесь дальше, пока что просветления не наблюдается - сплошной деццкий сад, штаны на лямках.

Я уже привёл пример с XML vs. SXML. Чего ещё надо?

> Однако если вы собираетесь с кем-нибудь общаться - например, писать статью for general audience - то я бы рекомендовал вам всё-таки пользоваться общепринятым языком.

А нет никакого общепринятого языка. Это - миф. С дурацкими наивными детсадовскими мифами - к разработчикам OpenMath, они быстро зачмырят. Не место в науке наивным детям.

> Очевидно, всё-таки запрещает кто-то, потому что все примеры на лиспе, которые я видел, написаны префиксно.

Ссылка на макру infix была проигнорирована. Симптоматично.

Какую же пустую голову надо иметь, чтоб умудриться не догонять - префиксная запись абсолютно никакого отношения к S-выражениям не имеет. Их можно использовать совместно, можно и не использовать - никому от этого кисло не станет.
Tuesday, May 10th, 2005 05:11 pm (UTC)
> Интересно, как вы узнали, что она была - проигнорирована?

опа!
арбатовский синтаксис!
Friday, May 6th, 2005 11:05 pm (UTC)
Похоже, опечатка где-то, не проверял, когда писал. Гарантированно работает вот это:

(defmacro appright (fn &rest args) (if (null (cdr args)) (car args) `(,fn ,(car args) (appright ,fn ,@(cdr args)))))