История изменений
Исправление 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))))
Так менее устрашающе?