Здравствуйте, Аноним, Вы писали:
А>>>Таки defmacro реализуется в десяток строк на syntax-case.
M>> Которого нет в стандарте.
А>Забавно беседовать о вкусе устриц с теми, кто их не только не пробовал, но даже не видел.
Хе хе. Посмешил. R6RS это не стандарт, а фигня. А в R5RS только syntax-rules с гигиеной.
А>Ну раз "ничего сложного", думаю pastebin выдержит — давайте-ка реализацию syntax-case на defmacro.
Вот для CL, например, реализация syntax-rules:
http://www.ccs.neu.edu/home/dorai/mbe/mbe-lsp.html
Другие варианты трансформеров там не нужны, и так defmacro есть.
А>Более простая как раз syntax-case (и, что парадоксально, при этом более мощная).
Да нет, не более мощная. Проще чем defmacro нет ничего, он туп до невозможности. syntax-rules же весьма сложен, и, что характерно, абсолютно не нужен. В качестве весёлого упражнения предлагаю попробовать реализовать на syntax-rules инфиксный синтаксис с биндингами и лямбдами, а так же pattern matching и list comprehensions.
А> Она проще и при написании и при понимании уже написанного.
Да ни фига оно не проще. Или ты из тех извращенцев, кто и про темплейты в C++ скажет, что оно "проще"? Тьюринг-полнота языка syntax-rules ещё ничего не значит. Внутри defmacro можно воспользоваться всем, что уже опделелено (включаяя и syntax-rules, между прочим).
А> Выше же приведен пример.
Где?!?
А> Вы конечно можете сказать, что нечитаемость это только плюс
Нечитаемость — это как раз про syntax-rules. Надо постараться очень, чтоб на них написать читаемо, если только не реализуешь очередную примитивную чушь вроде очередного for или там враппера для let и if. А вот с defmacro надо постараться, чтоб написать нечитаемо.
А> (+15 к илитарности, ага), но вряд ли с Вами согласится кто-нибудь кроме таких же коммонлисперов, как Вы.
А кто сказал, что я коммонлиспер? Я очень не люблю CL, меня бесит #' и funcall.
А>Чьорт. Кривая.
Именно так.
А> Нельзя воспользоваться.
Да, совершенно невозможно. Для чего либо серьёзного. Для очередного тупенького синтаксического сахара — запросто, а для компиляции сложного DSL — фигушки.
А> Вы таки открыли мне глаза. То, что делается едва ли не в каждом проекте на схеме "на самом деле" делать нельзя. Понабирают, блин, по объявлениям.
В практически каждом проекте на Схеме метапрограммирование практически не используется.