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-29

CLでSRFI-16

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

今回は、SRFI-16 case-lambdaです。

拡張されていないSchemeにはCLでのラムダリスト的なものはなく、手短に書きたい時などのために簡便な方法が色々と考えられているようです。

case-lambdaは引数のパターンをcaseで判断してボディを実行するというもの。

(setf (symbol-function (intern (reverse (string 'arg-length))))
      (case-lambda ((x) 1)
                   ((x y) 2)
                   (args :many)))
;=> #<FUNCTION (LAMBDA (&REST #:G1)) {10174EF339}>

(htgnel-gra 1)
;=> 1

(htgnel-gra 1 2)
;=> 2

(htgnel-gra 1 2 3)
;=> :MANY

(htgnel-gra 1 2 3 4)
;=> :MANY

あまり見掛けない気もするので、検索してみたらcase-lambda自体の定義が殆どでした。

あまり使い勝手が良さそうでもないので、人気がないのかもしれません。