Здравствуйте, Аноним, Вы писали:
M>> Хе хе. Посмешил. R6RS это не стандарт, а фигня. А в R5RS только syntax-rules с гигиеной. А>Ясно, очередной упоротый коммон-лиспер, не читавший Пастернака.
А не пойти ка ли тебе погулять мимо, а? И гулять до тех пор, пока все основные реализации не будут поддерживать R6RS?
И ещё — я не коммонлиспер. Я лет десять на CL не писал. Мой основной инструмент — Схема.
А>Так как насчет syntax-case (можешь начать с добавления гигиены в свой MBE)?
Это тривиальное расширение. Мой вариант показывать не буду — явно не в коня корм.
А>Конечно "не нужны". Кто ж сомневается. Даже в твоем примере — полторы сотни строк только для разбора темплейта.
Ну, это же CL, там всё перанально делается. Важен лишь тот факт, что достаточно сделать это ровно один раз, средствами тупых макр, и больше не париться.
А>Машина тьюринга (ок, можешь взять чистое лямбда-исчисление) — твой выбор. Зачем тебе лишний сахар? К чему это я? Ах да, "туп до невозможности" не означает "проще ничего нет".
Ты чушь несёшь. Феерическую.
А>А почему syntax-rules?
Потому что именно к нему претензии, и вообще к гигиеническим макрам.
А> На syntax-case оно ТОЧНО не будет сложнее defmacro (в худшем случае больше на тот самый десяток строк, необходимый для реализации defmacro на syntax-case),
defmacro на syntax-case — это одна строка, умник ты недоделанный. Если это полноценная реализация syntax-case, а не как обычно.
А> а скорее всего будет значительно проще (ибо деструктуризация входной формы производится автоматически, да и gensym-ами обмазываться не нужно)
Да на хрен не нужна ТАКАЯ деструктуризация. Ты реши, реши мои задачки. Я поржу.
А>Да уж. Когда тебе прямым текстом пишут в коде примеры синтаксиса это, конечно же, очень нечитаемо (паттерн-матчинг не нужен). Все эти car, cadar, caddaar читаются гораздо легче.
Криволапость отдельных лиспокодеров никакого отношения к фундаментальности defmacro не имеет.
M>> Нечитаемость — это как раз про syntax-rules. Надо постараться очень, чтоб на них написать читаемо, если только не реализуешь очередную примитивную чушь вроде очередного for или там враппера для let и if. А вот с defmacro надо постараться, чтоб написать нечитаемо. А>А чего стараться-то. С defmacro ВСЕГДА выходит нечитаемая каша. Старайся, не старайся — этого не избежать.
Как смешно бредит. Даже я так не умею. Тебе уже показали, что этот тупой и убогий вариант pattern matching, который есть в syntax-rules, реализуется тривиально. Так же тривиально реализуются и другие — в том числе и, например, PEG, или любой другой способ описания синтаксиса. Посмеши публику, сделай это на syntax-rules и прочих чисто схемских фичах.
M>> Да, совершенно невозможно. Для чего либо серьёзного. Для очередного тупенького синтаксического сахара — запросто, а для компиляции сложного DSL — фигушки. А>О. Начал вводить граничные условия. Чувствуешь что облажался?
Облажался ты и только ты.
А> Напомнить, чего ты там говорил? Таки давай уже расскажи людям, какие именно макросы нельзя использовать в том же модуле (или TLP), в котором они определены.
Берём, например, свежий SISC или ещё какую практически применимую Схему. Определяем в модуле функцию f, и (define-macro mf (x) (f x)). В том же модуле пытаемся использовать (mf ...). Обламываемся и горько плачем.
А>>> Вы таки открыли мне глаза. То, что делается едва ли не в каждом проекте на схеме "на самом деле" делать нельзя. Понабирают, блин, по объявлениям. M>> В практически каждом проекте на Схеме метапрограммирование практически не используется. А>Идиоты атакуют.
Я вижу, ты самокритичен. Это хорошо. А что такое метапрограммирование ты не знаешь. Попробуй, если не согласен с моим вердиктом и не считаешь себя шибко неумным, реши мои задачки. Инфиксный синтаксис, pattern matching (с ellipsis, конечно же, и с banana brackets в стиле F#). Да ещё обязательно с гигиеной, ведь без гигиены — это же defmacro получится. А, да, чуть не забыл — ещё и list comprehensions сделай. Порадуй почтенную публику.