【Common Lisp】型述語まとめ
Common Lisp の型述語の勉強メモです。
型述語
真偽値を返す関数を述語と言います。特にデータ型の判定をするものを型述語と呼びます。
- numberp
- arrayp
- characterp
- consp
- functionp
- hash-table-p
- listp
- stringp
- symbolp
型の名前に述語(predicate)を表すpがついているだけなので、どのような働きをするかはすぐわかります。
例:
CL-USER> (arrayp #(a b c)) T CL-USER> (symbolp 'a) T CL-USER> (stringp "lisp alien") T CL-USER> (consp '(1 . 2)) T CL-USER> (consp '(1 2 3)) T CL-USER> (numberp '(1)) NIL CL-USER> (listp '(1)) T
listpとconspは何が違うのか?
CL-USER> (listp '(1 2 3)) T CL-USER> (consp '(1 2 3)) T CL-USER> (listp '(1 . 2)) T CL-USER> (consp '(1 . 2)) T
一見、特に違いがないように見えます。まあ、リストはコンスセルが繋がったものなのでそりゃそうなのだろうとは思いますが・・・。 調べてみると、nilの扱いで違いが出るみたいです。
CL-USER> (listp nil) T CL-USER> (consp nil) NIL
nilは空リストなので、listp
では真が返します。コンスセルは2つのオブジェクトを指し示す構造なので、確かにconsp
の返り値が偽となるのは納得できます。
参考
listp と consp の違い - 日々ごちゃごちゃと考える
コンラッド・バルスキ(2013)「Land of Lisp」 川合史郎訳 オライリー・ジャパン