23 lines
629 B
Scheme
23 lines
629 B
Scheme
|
(define-structure mpd (export query)
|
||
|
(open scheme-with-scsh)
|
||
|
(begin
|
||
|
(define-syntax query
|
||
|
(syntax-rules ()
|
||
|
((_ a)
|
||
|
(mpd-query-1 `a))))
|
||
|
|
||
|
(define (mpd-query-equals params)
|
||
|
(apply format #f "~s == ~s" params))
|
||
|
|
||
|
(define (mpd-query-and params)
|
||
|
(format #f "~a AND ~a"
|
||
|
(mpd-query-1 (car params))
|
||
|
(mpd-query-1 (cadr params))))
|
||
|
|
||
|
(define (mpd-query-1 query)
|
||
|
(format #f "(~a)"
|
||
|
(let ((op (car query)))
|
||
|
(case op
|
||
|
('= (mpd-query-equals (cdr query)))
|
||
|
('and (mpd-query-and (cdr query)))))))))
|