depuis hier, j'ai essayé de programmer une déclaration spéciale de cas pour le régime qui procédez comme suit:utilisation du système Définir syntaxe
(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")))
au lieu d'utiliser tous les et de et la déclaration de cond, je serais:
(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")))
ce que je pouvais le faire jusqu'à présent, était le suivant:
(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))))
avec ce code:
(define-syntax scase
(syntax-rules()
((if condition body ...)
(if condition
(begin
body ...)))))
Ce que je voulais faire maintenant, est tout simplement permettre la déclaration de Scase d'avoir plusieurs arguments comme ceci:
(scase ((list? (cons 2 1)) 'here)
((list? '(2 1)) 'working))
, mais je ne peux pas sembler comprendre comment je peux le faire. Peut-être que vous pourriez me donner un peu d'aide?
Merci à l'avance;)
Si cela répond à votre question, vous devriez [l'accepter] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). –