CLでSRFI-87 — #:g1

Posted 2011-05-26 12:13:00 GMT

簡単そうなところからSRFIを移植していますが、今回は、SRFI-87です。
Schemeのcondでは、=>が使えて、述語が真ならば=>で指定した関数をその結果に適用できたりします。
SRFI-87は、それをcaseにも導入してみよう、というところです。
- srfi-87.
- (http://srfi.schemers.org/srfi-87/srfi-87.html)

(shadowing-import 'srfi-87:case)

(case 1 ((1 2 3 4) :=> #'values) ((5 6 7) (print '(5 6 7))) (:else :=> #'list)) ;=> 1

(case 5 ((1 2 3 4) :=> #'values) ((5 6 7) (print '(5 6 7))) (:else :=> #'list)) ;-> ; (5 6 7) ;=> (5 6 7)

(case 8 ((1 2 3 4) :=> #'values) ((5 6 7) (print '(5 6 7))) (:else :=> #'list)) ;=> (8)

移植について

今回もdefine-syntaxにはmbeを利用しています。
元のSchemeのものを知っている方は、おや、と思うところがあると思いますが、シンボルのインポートがらみで、=>とelseが他のパッケージとぶつかったりすると混ぜて使うのが面倒になりそうなので、キーワードにしてしまいました。

comments powered by Disqus