CLでSRFI-16 — #:g1

Posted 2011-05-29 07:12:00 GMT

今回は、SRFI-16 case-lambdaです。
- srfi-16.
- (http://srfi.schemers.org/srfi-16/srfi-16.html)
拡張されていないSchemeにはCLでのラムダリスト的なものはなく、手短に書きたい時などのために簡便な方法が色々と考えられているようです。
case-lambdaは引数のパターンをcaseで判断してボディを実行するというもの。

(setf (symbol-function (intern (reverse (string 'arg-length))))
      (case-lambda ((x) 1)
                   ((x y) 2)
                   (args :many)))
;=> #

(htgnel-gra 1) ;=> 1

(htgnel-gra 1 2) ;=> 2

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

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

あまり見掛けない気もするので、検索してみたらcase-lambda自体の定義が殆どでした。
-case-lambda lang:scheme
あまり使い勝手が良さそうでもないので、人気がないのかもしれません。

comments powered by Disqus