Re[37]: Scheme to be split into two language
От: Mr.Cat  
Дата: 31.08.09 17:15
Оценка:
Здравствуйте, metaprogrammer, Вы писали:
M> В той же, в которой и PFront.
Ну а конкретнее?
И да, юзая mbase — неспортивно хвастаться строками собственного кода.
Re[37]: Scheme to be split into two language
От: Mr.Cat  
Дата: 31.08.09 17:19
Оценка:
Здравствуйте, metaprogrammer, Вы писали:
M>И эти структуры деструктурировать надо по всякому, по разному. Так что и предикаты нужны, и самые разные варианты ellipsis, и хитрые биндинги (например, задать имя для всей подструктуры, и при этом определить структуру её элементов). Чем мощнее pattern matching, тем проще с разными структурами работать.
Ну так тот же match.scm вроде умеет чуть ли не все это.
Re[38]: Scheme to be split into two language
От: metaprogrammer  
Дата: 31.08.09 17:19
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

M>> В той же, в которой и PFront.

MC>Ну а конкретнее?

mbase последней версии, где шаблон $RP: в p:match появился (честно! он там не для syntax-case, и является частным случаем шаблона $$XXX).

MC>И да, юзая mbase — неспортивно хвастаться строками собственного кода.


Почему неспортивно? p:match — совершенно обобщённое решение, которое применятся вообще для всего (даже для компиляции из ML). Ничего syntax-case-специфичного в библиотеки не выносилось.
Re[38]: Scheme to be split into two language
От: metaprogrammer  
Дата: 31.08.09 17:23
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Ну так тот же match.scm вроде умеет чуть ли не все это.


И половины не умеет (например, предикатов). И написан очень сложно. Кроме того — генерит нехвостоворекурсивный код (ну и словечко...).
Re[39]: Scheme to be split into two language
От: Mr.Cat  
Дата: 31.08.09 17:27
Оценка:
Здравствуйте, metaprogrammer, Вы писали:
M> И половины не умеет (например, предикатов).
Matchable из chicken умеет (http://chicken.wiki.br/eggref/4/matchable) вроде это примерно тот же match.scm, не?

M>Кроме того — генерит нехвостоворекурсивный код (ну и словечко...).

Надо проверять конкретные случаи. Например?
Re[40]: Scheme to be split into two language
От: metaprogrammer  
Дата: 31.08.09 17:43
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Matchable из chicken умеет (http://chicken.wiki.br/eggref/4/matchable) вроде это примерно тот же match.scm, не?


Не не не. Chicken кстати внутри весь целиком на define-macro сделан. Ни единого syntax-rules и прочих руковыворачивателей для неуверенных в себе программистов.

M>>Кроме того — генерит нехвостоворекурсивный код (ну и словечко...).

MC>Надо проверять конкретные случаи. Например?

 (let loop ((l something)) 
   (match l
      ((x . y) (begin (dosomething x) (loop y))
      ...
    ))
Re[41]: Scheme to be split into two language
От: Mr.Cat  
Дата: 31.08.09 17:46
Оценка:
Здравствуйте, metaprogrammer, Вы писали:
MC>>Matchable из chicken умеет (http://chicken.wiki.br/eggref/4/matchable) вроде это примерно тот же match.scm, не?
M> Не не не.
А вот и да да да. Скачай matchable.egg и погляди внутрь.

M>Сhicken кстати внутри весь целиком на define-macro сделан.

Они в 4 на er емнип перешли.
Re[42]: Scheme to be split into two language
От: metaprogrammer  
Дата: 31.08.09 18:11
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>А вот и да да да. Скачай matchable.egg и погляди внутрь.


Ну, ладно. Более 2000 строк совершенно нечитабельного и неподдерживаемого кода против 200 строк реализации p:match, при значительно меньшей функциональности. И надо оно — религиозная гигиена такой ценой?

MC>Они в 4 на er емнип перешли.


Посмотрю. Если так, то сами себе буратины.
Re[43]: Scheme to be split into two language
От: metaprogrammer  
Дата: 31.08.09 18:15
Оценка:
Здравствуйте, metaprogrammer, Вы писали:

M> Ну, ладно. Более 2000 строк совершенно нечитабельного и неподдерживаемого кода


Блин, не туда смотрю. Там всего 500. Только читать ещё сложнее.
Re[43]: Scheme to be split into two language
От: Mr.Cat  
Дата: 31.08.09 19:37
Оценка:
Здравствуйте, metaprogrammer, Вы писали:
M>p:match
Это кто такой?
Re[41]: Scheme to be split into two language
От: Mr.Cat  
Дата: 31.08.09 20:12
Оценка:
Здравствуйте, metaprogrammer, Вы писали:
M>>>Кроме того — генерит нехвостоворекурсивный код (ну и словечко...).
MC>>Надо проверять конкретные случаи. Например?
M>
M> (let loop ((l something)) 
M>   (match l
M>      ((x . y) (begin (dosomething x) (loop y))
M>      ...
M>    ))
M>


Этот код выполняется в constant scpace:
(require-extension matchable)

(define (do-stuff)
  (let loop ((pair '(1 . 2)))
    (match pair
           ((101 . 102) (loop '(1 . 2)))
           ((a . b) (begin (display a)
                           (display " ")
                           (loop (cons b (+ b 1))))))))

(do-stuff)

Есть контрпример?
Re[39]: Scheme to be split into two language
От: cl-user  
Дата: 31.08.09 20:25
Оценка:
Здравствуйте, metaprogrammer, Вы писали:

M> mbase последней версии, где шаблон $RP: в p:match появился (честно! он там не для syntax-case, и является частным случаем шаблона $$XXX).


Как можно получить эту версию? по-прежнему надо писать авторам? На сайте всё ещё ссылка на 0.6
Re[40]: Scheme to be split into two language
От: Clerk  
Дата: 01.09.09 06:42
Оценка:
Здравствуйте, cl-user, Вы писали:

CU>Как можно получить эту версию? по-прежнему надо писать авторам? На сайте всё ещё ссылка на 0.6

По вышеприведенной ссылке http://lambda-the-ultimate.org/node/3281 есть ссылка на http://www.meta-alternative.net/mbase1.0beta1.zip
... << RSDN@Home 1.2.0 alpha 4 rev. 1238>>
Re[41]: Scheme to be split into two language
От: metaprogrammer  
Дата: 01.09.09 07:16
Оценка:
Здравствуйте, Clerk, Вы писали:

CU>>Как можно получить эту версию? по-прежнему надо писать авторам? На сайте всё ещё ссылка на 0.6

C>По вышеприведенной ссылке http://lambda-the-ultimate.org/node/3281 есть ссылка на http://www.meta-alternative.net/mbase1.0beta1.zip

В той версии $$RP: ещё нет, там пришлось бы с $$XXX: извращаться. Следующая бета появится, когда документация будет готова.
Re[13]: Scheme to be split into two language
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 01.09.09 08:56
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>Не скатимся. Переменные и функции разделять хорошо тем, что

MZ>не надо тогда лишний раз думать о названии переменных.

MZ>(let ((elt (elt seq 5)))

MZ> ...
MZ> )

Я вот посмотрел в свои многочисленные исходники и нашёл, что функции и переменные я почти всегда (нашёл только два одинаковых случая и то меня скривило от названий функций) называю по разному.

Наверное, связано это с тем, что функции у меня обычно глаголы, а переменные — существительные. Хотя в английском одно и то же слово и может быть и глаголом и существительным, у меня (и у тех, с кем я работал) такое практически не встречается.

Отсюда я могу сделать вывод, что это очень редкая ситуация (у тебя не так?). Значит преимущества мизерны. А вот минусы вполне осязаемы.

Ещё пример — в Haskell я никогда не страдал от того, что не могу назвать и функцию и значение одним именем.

Допускаю, что не страдал, потому что не задумывался о такой возможности. Интересно, насколько удобнее было бы писать

let head = head xs
    tail = tail xs
 in ...


? хз.
Re[33]: Scheme to be split into two language
От: Mr.Cat  
Дата: 02.09.09 09:12
Оценка:
Здравствуйте, 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.

И никакого mbase не надо.

http://www.wisdomandwonder.com/link/3787/how-small-can-a-scheme-implementation-be
Re[13]: Scheme to be split into two language
От: Mr.Cat  
Дата: 02.09.09 09:19
Оценка:
Здравствуйте, metaprogrammer, Вы писали:
M> Ни одна из них не подходит, по разным причинам.
Тут нарылась табличка с разными имплементациями схемы: http://spreadsheets.google.com/pub?key=twRSWnj1h-j_F3IHRXxwrmg&amp;output=html
Re[13]: Scheme to be split into two language
От: Mr.Cat  
Дата: 02.09.09 09:22
Оценка:
Здравствуйте, metaprogrammer, Вы писали:
M> Ни одна из них не подходит, по разным причинам.
Тут нарыл табличку с разными имплементациями схемы: http://spreadsheets.google.com/pub?key=twRSWnj1h-j_F3IHRXxwrmg&amp;output=html
Re[34]: Scheme to be split into two language
От: metaprogrammer  
Дата: 02.09.09 11:38
Оценка:
Здравствуйте, 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, работает на порядок быстрее.

Так что не надо про "не надо".
Re[14]: Scheme to be split into two language
От: metaprogrammer  
Дата: 02.09.09 11:46
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

M>> Ни одна из них не подходит, по разным причинам.

MC>Тут нарыл табличку с разными имплементациями схемы: http://spreadsheets.google.com/pub?key=twRSWnj1h-j_F3IHRXxwrmg&amp;output=html

Основные причины: много кода, жестко завязанного на bigloo и его нестандартные библиотеки. bigloo пока на r6rs и не смотрит. Другая часть моего схемского кода привязана к фичам SISC (в особенности — биндинги к жабе). Так что, каким бы прелестным ни был plt, но я на него могу только издалека радоваться. Кроме того, весь новый код всё равно на mbase пишу.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.