mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-16 09:17:35 +02:00
Added case macro
This commit is contained in:
parent
e7671ccf16
commit
71bdd86d9a
1 changed files with 27 additions and 0 deletions
|
@ -105,6 +105,33 @@
|
|||
(cons (rename 'begin) (cdr cl))
|
||||
(cons (rename 'cond) (cddr expr))))))
|
||||
(cadr expr)))))
|
||||
(cons 'case
|
||||
(lambda (expr rename compare)
|
||||
(define (body exprs)
|
||||
(cond
|
||||
((null? exprs)
|
||||
(rename 'tmp))
|
||||
((compare (rename '=>) (car exprs))
|
||||
`(,(cadr exprs) ,(rename 'tmp)))
|
||||
(else
|
||||
`(,(rename 'begin) ,@exprs))))
|
||||
(define (clause ls)
|
||||
(cond
|
||||
((null? ls) #f)
|
||||
((compare (rename 'else) (caar ls))
|
||||
(body (cdar ls)))
|
||||
((and (pair? (car (car ls))) (null? (cdr (car (car ls)))))
|
||||
`(,(rename 'if) (,(rename 'eqv?) ,(rename 'tmp)
|
||||
(,(rename 'quote) ,(car (caar ls))))
|
||||
,(body (cdar ls))
|
||||
,(clause (cdr ls))))
|
||||
(else
|
||||
`(,(rename 'if) (,(rename 'memv) ,(rename 'tmp)
|
||||
(,(rename 'quote) ,(caar ls)))
|
||||
,(body (cdar ls))
|
||||
,(clause (cdr ls))))))
|
||||
`(let ((,(rename 'tmp) ,(cadr expr)))
|
||||
,(clause (cddr expr)))))
|
||||
(cons 'cond-expand
|
||||
;; Based on the cond-expand macro from Chibi scheme
|
||||
(lambda (expr rename compare)
|
||||
|
|
Loading…
Add table
Reference in a new issue