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