実践CommonLispを読むその4

第五章 関数
(defun name (parameter*)
  "省略可能なドキュメント"
  body-form)

だそうだ。「defun」で定義したものが関数でしょ。ドキュメントを記述できるのんですね。関数の命名規則がなれないね、下線や大文字ではなくハイフンを使う事。あと、文字列を数値に変換する関数は、他の言語であれば「char_to_num」「char2num」「charToNum」等々あるんだろうが、LISPでは「char->num」が一般的。「->」を使うところがLISPなんでしょうね。

関数のパラメータに関して

オプショナルパラメータ(&optional)
オプショナルパラメータの指定。オプショナルパラメータが存在しなければNILになる。
デフォルト値は束縛するパラメータに対して(a 10)とするとパラメータが指定されな
かった場合、aに10が束縛される。さらに(a 10 a-supplied-p)とすると、束縛された
パラメータが引数なのかデフォルト値なのかが分かる。
引数の場合、「T」、デフォルト値の場合、「NIL」。
レストパラメータ(&rest)
引数を全て一括する事ができる。FORMAT関数や「+」などに利用されている。
ちなみに「CALL-ARGUMENTS-LIMIT」で処理系ごとの引数最大値を教えてくれるらしい。
キーワードパラメータ(&key)
キーワードを指定し、どのパラメータに値を束縛させたいかを決めれる。
誤解を恐れず言うと、ハッシュのようなもの。本質は違うのだろうが、
考え方はいいんじゃないの?滅多に使わないらしい。

そういえば、Common-Lispの処理系では、アルファベットの大文字で統一されているとの事です。例えば関数を定義する際に小文字で書いたにも関わらず返ってきた値は大文字だったとか、それは処理系の方で小文字を大文字に変換して返している。だから「Foo」も「FOO」も「fOo」も全て同一と見なされる。例外を除いては・・・

何故そうなったかと言うと、何ででしょうね。分かりません。

あとは「lambda」かな、詳しく理解できていない。無名関数を作るものだと言う理解でしかないんだが、いいよね。LISPって少し面白いと感じるようになってきた。本が面白いね、さすが「実践CommonLisp」だ。でもLISPができれば何ができるのだろうが、その辺がわからないんだよね。その内理解できれば嬉しいよ。