07/08/12 01:42:01
>>971
(define-macro (return-from% name . result) `(,name ,@result))
(define-macro (block% name . body) `(call/cc (lambda (,name) ,@body)))
(define-macro (define% name . body)
(if (symbol? name)
`(define ,name (block% ,name ,@body))
`(define ,(car name)
(block% ,(car name) (lambda ,(cdr name) ,@body)))))
(define% (test1 x)
(if (not (number? x))
(return-from% func #f))
x)
;;
(test1 1) => 1
(test1 'a) => #f
まあ、つまり見たまま。