со вчерашнего дня я пытался программировать специальное заявление случай для схемы, которые могли бы сделать следующее:Определить-синтаксис использования схемы
(define (sort x)
(cond ((and (list? x) x) => (lambda (l)
(sort-list l)))
((and (pair? x) x) => (lambda (p)
(if (> (car p) (cdr p))
(cons (cdr p) (car p))
p)))
(else "here")))
вместо того, чтобы использовать все и-х и о Cond, я бы:
(define (sort x)
(scase ((list? x) => (lambda (l)
(sort-list l)))
((pair? x) => (lambda (p)
(if (> (car p) (cdr p))
(cons (cdr p) (car p))
p)))
(else "here")))
Что я мог сделать до сих пор, было это:
(define (sort x)
(scase (list? x) (lambda (l)
(sort-list l)))
(scase (pair? x) (lambda (p)
(if (> (car p) (cdr p))
(cons (cdr p) (car p))
p))))
с этим кодом:
(define-syntax scase
(syntax-rules()
((if condition body ...)
(if condition
(begin
body ...)))))
То, что я хотел сделать сейчас, это просто позволить заявление scase иметь несколько аргументов, как это:
(scase ((list? (cons 2 1)) 'here)
((list? '(2 1)) 'working))
, но я не могу понять, как я могу сделать это. Может быть, вы, ребята, могли бы мне немного помочь?
Заранее спасибо;)
Если это ответили на ваш вопрос, вы должны [принять его] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). –