История изменений
Исправление monk, (текущая версия) :
На мой взгляд код на лиспе гораздо более прозрачен.
Вопрос привычки. На Scala много бойлерплейта из-за типизации и того, что макрос получает на вход не сразу список, а `(block ,@body). На Nemerle, по-моему, читается даже проще. Также как на Scheme:
(define-syntax change
(syntax-rules
[(change (foo a b c)) (bar (+ a b) (+ a c))]
[(change ((head ...) rest ...)) (((change head) ...)
(change rest) ...)]
[(change (body ...)) ((change body) ...))]))
Исправление monk, :
На мой взгляд код на лиспе гораздо более прозрачен.
Вопрос привычки. На Scala много бойлерплейта из-за типизации и того, что макрос получает на вход не сразу список, а `(block ,@body). На Nemerle, по-моему, читается даже проще. Также как на Scheme:
(define-syntax change
(syntax-rules
[(change (foo a b c)) (bar (+ a b) (+ a c))]
[(change ((head ...) rest ...)) ((change head ...)
(change rest) ...)]
[(change (body ...)) ((change body) ...))]))
Исходная версия monk, :
На мой взгляд код на лиспе гораздо более прозрачен.
Вопрос привычки. На Scala много бойлерплейта из-за типизации и того, что макрос получает на вход не сразу список, а `(block ,@body). На Nemerle, по-моему, читается даже проще. Также как на Scheme:
(define-syntax change
(syntax-rules
[(change ((foo a b c) body ...)) ((bar (+ a b) (+ a c))
(change body) ...))]
[(change ((head ...) rest ...)) ((change head ...)
(change rest) ...)]
[(change (head rest ...)) (head (change rest) ...))]))