2008年9月19日金曜日

【CL入門】8 リスト処理

こつこつ。

  • えっと、リストってなんだっけ。。。そっか、第一階層のコンスセルの連鎖がnil終端されているもの、だ。リストじゃないものは、atom、cons cell (cdr がnilじゃないもの)、dotted listなどなど。ただ、nilは両生類か。'()なら空リストだし。試す。

    CL-USER(3): (listp (list 'a 'b))
    T
    CL-USER(4): (listp 'a)
    NIL
    CL-USER(5): (listp (cons 'a 'b))
    T
    CL-USER(6): (listp nil)
    T
    CL-USER(7): (atom nil)
    T

    おお、cons cellはlistなのか?

    CL-USER(8): (cons 'a 'b)
    (A . B)
    CL-USER(9): (consp (cons 'a 'b))
    T
    CL-USER(10): (consp (list 'a 'b))
    T
    CL-USER(11): (consp nil)
    NIL
    CL-USER(12): (listp nil)
    T

    ふむ、listpとconspは違いがあるにはあるが、listpはほぼconspだ。
    あ、P106に説明があった。。。「listpという述語がある。その名前のために、リストかどうかを判定する述語だと誤解しやすいので注意しておこう。」そりゃ、誤解するってば、、、
    listなんぞや、は私の冒頭の理解でよさげ。
  • この本、関数の引数で関数をわたすとき、ほぼfunctionでまれにquoteだったりするんだけど意図あるのかな。また意味あるのかな? クロージャが必要になるケースが例になってないので、その限りにおいてはどっちでもよいと思うのだが。

    CL-USER(78): (mapcar 'cons '(a b c) '(1 2 3 4 5 6))
    ((A . 1) (B . 2) (C . 3))
    CL-USER(82): (mapcar #'cons '(a b c) '(1 2 3 4 5 6))
    ((A . 1) (B . 2) (C . 3))
    CL-USER(79): (mapcar #'(lambda (x) (* x x))
    '(7 2 3 8))
    (mapcar #'(lambda (x) (* x x))
    '(7 2 3 8))
    (49 4 9 64)
    CL-USER(80): (mapcar '(lambda (x) (* x x))
    '(7 2 3 8))
    (49 4 9 64)

  • pリストについて、細かいところがこの本とaclではちょこちょこ違う。aclにあわせて理解しておく。

次回は宣言。結構大事なところなのだが、この本ではどんな書きぶりなんだろー。

0 件のコメント: