Здравствуйте, metaprogrammer, Вы писали: M> В той же, в которой и PFront.
Ну а конкретнее?
И да, юзая mbase — неспортивно хвастаться строками собственного кода.
Здравствуйте, metaprogrammer, Вы писали: M>И эти структуры деструктурировать надо по всякому, по разному. Так что и предикаты нужны, и самые разные варианты ellipsis, и хитрые биндинги (например, задать имя для всей подструктуры, и при этом определить структуру её элементов). Чем мощнее pattern matching, тем проще с разными структурами работать.
Ну так тот же match.scm вроде умеет чуть ли не все это.
Здравствуйте, Mr.Cat, Вы писали:
M>> В той же, в которой и PFront. MC>Ну а конкретнее?
mbase последней версии, где шаблон $RP: в p:match появился (честно! он там не для syntax-case, и является частным случаем шаблона $$XXX).
MC>И да, юзая mbase — неспортивно хвастаться строками собственного кода.
Почему неспортивно? p:match — совершенно обобщённое решение, которое применятся вообще для всего (даже для компиляции из ML). Ничего syntax-case-специфичного в библиотеки не выносилось.
Здравствуйте, metaprogrammer, Вы писали: M> И половины не умеет (например, предикатов).
Matchable из chicken умеет (http://chicken.wiki.br/eggref/4/matchable) вроде это примерно тот же match.scm, не?
M>Кроме того — генерит нехвостоворекурсивный код (ну и словечко...).
Надо проверять конкретные случаи. Например?
Не не не. Chicken кстати внутри весь целиком на define-macro сделан. Ни единого syntax-rules и прочих руковыворачивателей для неуверенных в себе программистов.
M>>Кроме того — генерит нехвостоворекурсивный код (ну и словечко...). MC>Надо проверять конкретные случаи. Например?
Здравствуйте, metaprogrammer, Вы писали: MC>>Matchable из chicken умеет (http://chicken.wiki.br/eggref/4/matchable) вроде это примерно тот же match.scm, не? M> Не не не.
А вот и да да да. Скачай matchable.egg и погляди внутрь.
M>Сhicken кстати внутри весь целиком на define-macro сделан.
Они в 4 на er емнип перешли.
Здравствуйте, Mr.Cat, Вы писали:
MC>А вот и да да да. Скачай matchable.egg и погляди внутрь.
Ну, ладно. Более 2000 строк совершенно нечитабельного и неподдерживаемого кода против 200 строк реализации p:match, при значительно меньшей функциональности. И надо оно — религиозная гигиена такой ценой?
MC>Они в 4 на er емнип перешли.
Здравствуйте, metaprogrammer, Вы писали: M>>>Кроме того — генерит нехвостоворекурсивный код (ну и словечко...). MC>>Надо проверять конкретные случаи. Например? M>
Здравствуйте, metaprogrammer, Вы писали:
M> mbase последней версии, где шаблон $RP: в p:match появился (честно! он там не для syntax-case, и является частным случаем шаблона $$XXX).
Как можно получить эту версию? по-прежнему надо писать авторам? На сайте всё ещё ссылка на 0.6
Здравствуйте, MasterZiv, Вы писали:
MZ>Не скатимся. Переменные и функции разделять хорошо тем, что MZ>не надо тогда лишний раз думать о названии переменных.
MZ>(let ((elt (elt seq 5))) MZ> ... MZ> )
Я вот посмотрел в свои многочисленные исходники и нашёл, что функции и переменные я почти всегда (нашёл только два одинаковых случая и то меня скривило от названий функций) называю по разному.
Наверное, связано это с тем, что функции у меня обычно глаголы, а переменные — существительные. Хотя в английском одно и то же слово и может быть и глаголом и существительным, у меня (и у тех, с кем я работал) такое практически не встречается.
Отсюда я могу сделать вывод, что это очень редкая ситуация (у тебя не так?). Значит преимущества мизерны. А вот минусы вполне осязаемы.
Ещё пример — в Haskell я никогда не страдал от того, что не могу назвать и функцию и значение одним именем.
Допускаю, что не страдал, потому что не задумывался о такой возможности. Интересно, насколько удобнее было бы писать
Здравствуйте, metaprogrammer, Вы писали: M>Кстати, моя реализация syntax-rules и syntax-case — 150 строк с комментариями.
Btw:
How small does it have to be? Chibi Scheme does syntax-rules in 174 lines of Scheme, layered over explicit renaming. Indeed, Chibi does essentially all of R5RS in 4822 lines of C + 708 lines of Scheme.
Здравствуйте, Mr.Cat, Вы писали:
MC>How small does it have to be? Chibi Scheme does syntax-rules in 174 lines of Scheme, layered over explicit renaming. Indeed, Chibi does essentially all of R5RS in 4822 lines of C + 708 lines of Scheme. MC>И никакого mbase не надо.
Ну ты сравнил, chibi — игрушка, да ещё и интерпретатор. У меня вот игрушечный быстрый компилятор Arc и того меньше, и без всякого Си.
Кроме того, в chibi очень нечитабельный и медленный интерпретатор syntax-rules (как и та реализация на CL, которую я ранее приводил). Моя реализация — эффективный компилятор syntax-rules, работает на порядок быстрее.
Основные причины: много кода, жестко завязанного на bigloo и его нестандартные библиотеки. bigloo пока на r6rs и не смотрит. Другая часть моего схемского кода привязана к фичам SISC (в особенности — биндинги к жабе). Так что, каким бы прелестным ни был plt, но я на него могу только издалека радоваться. Кроме того, весь новый код всё равно на mbase пишу.