昨日以来、私は次のことを行うスキームの特別なケースステートメントをプログラムしようとしています:
(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")))
すべての and と 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))
しかし、どうすればそれができるのかわからないようです。多分あなたたちは私に少し助けを与えることができますか?
前もって感謝します ;)