LINUX.ORG.RU

История изменений

Исправление 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) ...))]))