Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2011-05-26

CLでSRFI-87

| 21:13 | CLでSRFI-87 - わだばLisperになる を含むブックマーク はてなブックマーク - CLでSRFI-87 - わだばLisperになる

簡単そうなところからSRFIを移植していますが、今回は、SRFI-87です。

Schemeのcondでは、=>が使えて、述語が真ならば=>で指定した関数をその結果に適用できたりします。

SRFI-87は、それをcaseにも導入してみよう、というところです。

(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が他のパッケージとぶつかったりすると混ぜて使うのが面倒になりそうなので、キーワードにしてしまいました。