myfinderの技術や周辺的活動のblog

2009年9月2日水曜日

「実践Common Lisp」読書録2

引き続き「実践Common Lisp」やります。

今回はLispオペレータのさわりのあたり(リスト)を。

1.リスト
Lispのリストはlist関数で作る。
list関数は複数の引数からなるリストを返す関数(まんまですが)

* (list 1 2 3)

(1 2 3)

リストは入れ子にもできる。

* (list 1 (list 1 2) 2 3)

(1 (1 2) 2 3)


2.属性リスト
シンボルとその要素を交互に並べるリストを「属性リスト」といい、属性リストはgetf関数でシンボルを指定して値を返す事ができる。

* (list :a 1 :b 2 :c 3)

(:A 1 :B 2 :C 3)
* (getf (list :a 1 :b 2 :c 3) :a)

1

実行結果からわかるように、getf関数を使うと属性リストをハッシュのように利用できる。

3.属性リストを使って関数を定義する
例えば3つのフィールド(タイトル、アーティスト、レート)を受けとって属性リストを返す関数を定義してみる

* (defun music (title artist rate) (list :title title :artist artist :rate rate))

MUSIC

defunというのはdefine functionの略で、関数定義という意味になる。
この関数を用いて曲を表す属性リスト(レコード)を作りたい場合、下記のようにmusic関数を呼べばよい。

* (music "群青日和" "東京事変" 7)

(:TITLE "群青日和" :ARTIST "東京事変" :RATE 7)


次回はここで作成した属性リストを複数保持する変数を定義したり、その変数の中身をdumpする関数を定義するなどする。

0 件のコメント: