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

CLでSRFI-5

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

SRFIにはLET系の拡張提案は多いようですが、SRFI-5は、名前付きLETの提案で、2種類の書法があるようです。

一つは良くみる形式ですが、もう一つはあまり見掛けません。

なんのためにCLに移植するのかは自分でも良く分かりませんが、移植することにしてみました。

SRFI-5だと下のような書き方ができます。

(shadowing-import 'srfi-5:let)

(let fib ((n 10))
  (if (< n 2)
      n
      (+ (fib (1- n))
         (fib (- n 2)))))

(let (fib (n 10))
  (if (< n 2)
      n
      (+ (fib (1- n))
         (fib (- n 2)))))

最初のものはいつもの名前付きLETですが、2番目は、括弧の位置が違います。

(define fib (lambda (n) ...))

(define (fib n) ...)

の二つの書式を名前付きLETにも、ということらしいです。

移植について

新しいLETを定義するわけですが、CL:LETとぶつからないようにするには、普段あまり気にしない名前の衝突について考えて作成したり使ったりする必要があります。

また、新しいLETを作る、といっても、CL:LETを上書きしなくても大丈夫です(上書きも一つの方法ですが)

CLパッケージにあるものとぶつかるような名前は、極力使わないようにする、というのがなんとなくの定石かなとは思いますが、CLのパッケージの仕組みは十分柔軟にできていて、パッケージの扱いを良く考えれば避ける必要もないのかなと個人的には思いました。

ゲスト



トラックバック - http://cadr.g.hatena.ne.jp/g000001/20110522