28 lines
970 B
Scheme
28 lines
970 B
Scheme
#!r6rs
|
|
;; Copyright 2009 Derick Eddington. My MIT-style license is in the file named
|
|
;; LICENSE from the original collection this file is distributed with.
|
|
|
|
(library (srfi srfi-61)
|
|
(export
|
|
(rename (general-cond cond)))
|
|
(import
|
|
(rnrs))
|
|
|
|
(define-syntax general-cond
|
|
(lambda (stx)
|
|
(syntax-case stx ()
|
|
((_ clauses ...)
|
|
(with-syntax (((ours ...)
|
|
(map (lambda (c)
|
|
(syntax-case c (=>)
|
|
((generator guard => receiver)
|
|
#'((let-values ((vals generator))
|
|
(and (apply guard vals)
|
|
vals))
|
|
=> (lambda (vals)
|
|
(apply receiver vals))))
|
|
(_ c)))
|
|
#'(clauses ...))))
|
|
#'(cond ours ...))))))
|
|
)
|