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 |

2008-01-25

Practical Common Lisp (23)

| 15:24 | Practical Common Lisp (23) - わだばLisperになる を含むブックマーク はてなブックマーク - Practical Common Lisp (23) - わだばLisperになる

Practical Common Lisp 第5章5. Functionsを読んでメモしてみています。

大分間が開いてしまいました。かなり、まったり進行です。

Mixing Different Parameter Types

  • 各種ラムダパラメータは組み合わせられるが、リストに現われる順番には決まりがある。下記の順番である必要がある。
    1. &optional
    2. &rest
    3. &key
  • これらのパラメータは組み合わせられるものの直感的でない動作をするものもあるので注意が必要
1.
((lambda (x &optional y &key z) (list x y z)) 1 2 :z 3)

2.
((lambda (x &optional y &key z) (list x y z)) 1 :z 3)
;=> error

3.
((lambda (x &optional y &rest z) (list x y z)) 1 3)
;=> (1 3 nil)

4.
((lambda (&rest rest &key x y z) (list rest x y z)) :x 1 :y 2 :z 3)
;=> ((:X 1 :Y 2 :Z 3) 1 2 3) 

個人的には、2のエラーは&keyと&restが同じ場所に格納されると考えると合点が行くんじゃないかと思っています。