LINUX.ORG.RU

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

Исправление monk, (текущая версия) :

Если не пытаться экономить строчку на объединении and и or, то будет

(define-syntax-rule (select query records)
  (...
   (begin
     (define-syntax-parameter rec (syntax-rules ()))
     (define-syntax query-helper       
       (syntax-rules (and or not)         
         [(_ (or arg ...)) (or (query-helper arg) ...)]
         [(_ (and arg ...)) (and (query-helper arg) ...)]
         [(_ (not arg)) (not (query-helper arg))]
         [(_ q) (has-tag-p q rec)]))
     (filter (lambda (r)
               (syntax-parameterize ([rec (syntax-id-rules () [_ r])])
                 (query-helper query)))
             records))))

Так менее устрашающе?

Исходная версия monk, :

Если не пытаться экономить строчку на объединении and и or то будет

(define-syntax-rule (select query records)
  (...
   (begin
     (define-syntax-parameter rec (syntax-rules ()))
     (define-syntax query-helper       
       (syntax-rules (and or not)         
         [(_ (or arg ...)) (or (query-helper arg) ...)]
         [(_ (and arg ...)) (and (query-helper arg) ...)]
         [(_ (not arg)) (not (query-helper arg))]
         [(_ q) (has-tag-p q rec)]))
     (filter (lambda (r)
               (syntax-parameterize ([rec (syntax-id-rules () [_ r])])
                 (query-helper query)))
             records))))

Так менее устрашающе?