by shigemk2

当面は技術的なことしか書かない

対話によるCommon Lisp入門 42 p系メソッド

変数にはどんなデータも代入出来るので、
プログラムの実行中にデータ型を判定する必要が生じることがある。
listpとかsymbolpとか。

[1]> (listp (first '(a b c)))
NIL
[2]> (symbolp (first '(a b c)))
T
[3]> (integerp (first '(a b c)))
NIL
[4]> (atomp (first '(a b c)))

*** - EVAL: undefined function ATOMP
The following restarts are available:
USE-VALUE      :R1      Input a value to be used instead of (FDEFINITION 'ATOMP).
RETRY          :R2      Retry
STORE-VALUE    :R3      Input a new value for (FDEFINITION 'ATOMP).
ABORT          :R4      Abort main loop
Break 1 [5]> :a
[6]> (atom (first '(a b c)))
T
[7]> (consp (first '(a b c)))
NIL
[8]> (numberp (first '(a b c)))
NIL

なお、真か偽かを判定する関数を述語(predicate)といい、
慣習として述語の名前の終わりにはこの頭文字のpをつける事が多い。

なお、atomとnullにpがついていないのは、この慣習が出来るより以前の昔から
あったからである。

まあ、inodeのiが結局何なのか謎なのと同じで、
こういう慣習は無理に知らなくてもよいのかもしれない。