LINUX.ORG.RU

Синтаксис и LISP'ы

 , ,


0

1

Часто можно наткнуться на мнение, что у лиспа(ов) нет синтаксиса. Хотелось бы понять, что конкретно тут имеется в виду.

Во-первых, синтаксическая запись s-expr'ов так же является некоторым языком, со своими синтаксическими правилами и возможностью описания посредством грамматики.

Во-вторых, различные диалекты лиспа вводят специальные дополнительные синтаксические конструкции, вроде [ и ] в clojure или typed racket.

Имеется в виду, что этот синтаксис прост и фактически без особых изменений определяет AST?


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

AST доступно как fexpr'ам

Фекспрам не доступно, т.к. фекспры выполняются в рантайме. АСТа уже в этот момент не существует, обратиться к нему нельзя.

Макросы — это суррогат fexpr'ов.

Наоборот. Макрос - это функция, которая выполняется в компайлтайме. Фекспр же выполняется в рантайме, потому ничем не отличается от обычной функции. Фекспры - некая костыльная попытка убогой эмуляции части функционала макросов при помощи обычных функций.

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

нет никакого просто «пространства имен»

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

А ты, идиот, предлагаешь полную чушь, ты говоришь, типа, давай у нас имя foo будет означать и 1 и 2 одновременно, в одном и том же контексте.

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

. У тебя библиотека — это объект, и все есть объект, и у акждого объекта все есть неймспейс.

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

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

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

У меня реально уже подозрение, что ты больной. Средства для работы с этими неймспейсами — это сообщения.

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

АСТа уже в этот момент не существует, обратиться к нему нельзя.

Это почему же? В тру лиспах AST доступно всегда. В Io, кстати, тоже. Учи матчасть, короче, ты утомил уже.

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

Макрос - это функция

Макрос - это НЕ функция

//thread

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

У меня реально уже подозрение, что ты больной. Средства для работы с этими неймспейсами — это сообщения.

Какое сообщение мне надо отправить неймспейсу объекта X, чтобы имена из его неймспейса стали доступны в неймспейсе объекта Y?

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

Макрос - это НЕ функция

Функция, которая связана в фазе на 1 меньше, чем та, в которой она выполняется, если быть более точным.

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

В тру лиспах AST доступно всегда.

Это не АСТ, это просто некоторое значение в рантайме. Функция, работающая с этим АСТ (фекспр), ничем не отличается от любой другой рантайм-функции, а это значение - от любых других значений.

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

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

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

Какое сообщение мне надо отправить неймспейсу объекта X, чтобы имена из его неймспейса стали доступны в неймспейсе объекта Y?

getSlot

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

Ты далек. Осиль семантику Ъ ООП. У тебя мыслишки не в ту сторону, бесполезно тебе что-либо объяснять.

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

во всех своих примерах

Это сахар. a == Lobby a

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

Это не АСТ, это просто некоторое значение в рантайме

Это абстрактное синтаксическое дерево, блеать.

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

Функция, работающая с этим АСТ (фекспр), ничем не отличается от любой другой рантайм-функции, а это значение - от любых других значений.

Да, именно поэтому макросы сосут.

anonymous ()

Лисп ето тот случай когда дебилы собрались вместе и тупят коллективно а нормальные не могут им возразить потомучто лень ради етого доку по лиспу читать. Я прочел- хуйтень как я и думал. Вобщем лисп ето perl самой 1й версии но без без циклов вместо ветвлений условные выражения и нетнормального парзера формул с приоритетами +(a,b) надо писать вместо a+b

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

ЛОР/Development ето тот случай когда дебилы собрались вместе и тупят коллективно а нормальные не могут им возразить потомучто лень ради етого доку по лиспу читать. Я прочел- хуйтень как я и думал. Вобщем лисп ето perl самой 1й версии но без без циклов вместо ветвлений условные выражения и нетнормального парзера формул с приоритетами +(a,b) надо писать вместо a+b

fix

ados ★★★★★ ()
Ответ на: комментарий от kim-roader

Какое отношение имеет гомоиконность к отсутствию синтаксиса?

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

И как ъ-семантика ооп поможет, когда у тебя появится два объекта с одним именем? Какие спосбоы решения этой проблемы предлагает ъ-ооп-ИО?

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

Это сахар.

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

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

Да, именно поэтому макросы сосут.

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

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

Нет, ведь макросы могут делать то, что не могут делать обычные функции

Это что же например?

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

как ъ-семантика ооп поможет, когда у тебя появится два объекта с одним именем

Очевидно же. В глобальном пространстве имён должны быть только объекты-пакеты (с именами типа com_apache_hibernate). А все остальные имена только внутри них.

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

Да, именно поэтому макросы сосут.

Выполнять вычисления на уровне компайлтайма.

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

Запомни, если ты хочешь понять программирование, забудь вообще эти быдлословечки, типа глобальная область и прочая параша. Есть только сообщения и объекты. Причем объекты — это довольно абстрактное понятие, они не представлены какой-либо четкой структурой. Можно сказать, что объект определяется его поведением. Больше ничего нет.

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

Но у него же нет возможности заимпортить имена пакета в неймспейс. То есть придется вместо fun() писать все время nameSpace1.nameSpace2.nameSpace3.fun(). Это ад ебаный.

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

Да мне поебать на твои словечки. Скажи мне, как в твоем ъ-ооп разрешается конфликт имен. Или раз на твоем недоязычке никто не пишет, то и конфликта имен, значит, в коде на этом языке не существует по причине отсутствия самого кода? А что, логично.

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

Так с точки зрения семантики нет никакого компилтайма. Компилтайм — это вопрос реализации, а не семантики.

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

Так с точки зрения семантики нет никакого компилтайма.

С макросами - есть.

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

nameSpace1.nameSpace2.nameSpace3.fun()

Не понятно, что ты там имел в виду под этим высером, но вообще то если надо, то, fun=nameSpace1.nameSpace2.nameSpace3.fun()

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

Не понятно, что ты там имел в виду под этим высером, но вообще то если надо, то, fun=nameSpace1.nameSpace2.nameSpace3.fun()

и что, мне под все тысячу функций хуячить вот такие вот врапперы вида fun=nameSpace1.nameSpace2.nameSpace3.fun()? Отличное решение, чо.

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

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

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

Все, я понял, про что ты плетешь. Ты про обычные лексические замыкания талдычешь. Типа

(define (module)
 (define a 1) ; вот тут то что ты называешь неймспейсом
 (define b 2)
 (lambda (x)(dosmthwith a b x)))
То есть тупые жабские классы, только без жабского сахара. Все, гуляй.

//thread

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

Все, я понял, про что ты плетешь.

Нет, ты не понял.

Ты про обычные лексические замыкания талдычешь.

Нет, я прошу тебя объяснить, какие средства разрешения конфликта имен предоставляет язык. С замыканиями это никак не связано. В библиотеке Х есть объект huy и в библиотеке Y есть объект huy, я хочу использовать обе библиотеки. Как мне это сделать?

То есть тупые жабские классы, только без жабского сахара.

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

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

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

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

Хули ты такое нищее ничтожество тогда, если ты поняло в программирование, чего все остальные не поняли?

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

Так это семантика, а не синтаксис, если не ошибаюсь

(loop for i from 1 to 10 sum i)

Точно не синтаксис?

no-such-file ★★★★★ ()
Ответ на: комментарий от no-such-file

Нет, не синтаксис. АСТ будет '(loop for i from 1 to 10 sum i) вне зависимости от того, как определен loop (и определен ли вообще). А синтаксис - это и есть правила построения АСТ.

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

Ага, прям как в любом другом ЯП, АСТ будет 'loop for i from 1 to 10 sum i' синтаксиса ваще нигде нет, ура, посоны.

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

(loop for i from 1 to 10 sum i)
Точно не синтаксис?

Вобще loop это библиотека. Пусть и включенная в стандарт. Библиотеки обычно не относят к синтаксису языка. С точки зрения лиспа здесь список и атомы и функциональный вызов. Если же попыться выделить синтаксис именно Loop-а то затык будет в конечности элементов Loop-овско DSL. Почти каждый элемент будет одновременно одним и тем же как в смысле семантики так и синтаксиса. Так для примера будет довольно сложно написать синктаксический корректный, но неверный семантически пример. Поэтому если и говорить о синтаксисе, то о его выроженом варианте. Примерно по тем же причинам сиинтаксис макросов обынчно сам пом по себе не рассматривается в том же смысле что и синтакисис ЯП.

antares0 ★★★ ()

Синтаксис задается грамматикой. У лиспа есть грамматика, следовательно, есть и синтаксис, как и у любого другого ЯП.

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

Суть в том, что (loop for i from 1 to 10 sum i) парсится так же, как, например, (+ x y z 1 a 10 b c), а именно — список из символа, символа, символа, символа, числа, символа, числа, символа и символа. В языке с синтаксисом и АСТ они бы парсились по-разному: в первом случае как оператор цикла, а во втором как арифметическое выражение.

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

Ага, прям как в любом другом ЯП, АСТ будет 'loop for i from 1 to 10 sum i' синтаксиса ваще нигде нет, ура, посоны.

Нет. В любом другом языке AST будет другим. Там будет синтаксическая конструкция, которая будет разбираться парсером, который по ней построит AST. В лиспе (loop for i from 1 to 10 sum i) для парсера ничем не отличается от (bla-bla-bla bla a b 1 c 10 d a). В другом языке - это будут разные языковые конструкции.

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

И что? Кто мешает поменять операторы местами? Парсинг проще, да, но сути это не меняет.

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