値を真偽値に変換したい - lisp-cookbook-ja/common-lisp GitHub Wiki

Common Lispでは、NIL以外は、真として扱われ、これを利用して真としての返り値にT以外を使う関数があります。(member等が代表的な例です。)

(member :foo '(:foo :bar :baz))
;=>  (:FOO :BAR :BAZ)

場合によっては、TかNILかだけで値を返したい場合がありますが、慣用句としては、

(and (member :foo '(:foo :bar :baz)) t)
;=>  T

(and (member :quux '(:foo :bar :baz)) t)
;=>  NIL

(not (not (member :foo '(:foo :bar :baz))))
;=>  T

(not (not (member :quux '(:foo :bar :baz))))
;=>  NIL

のようなものがあるようです。 また、

(defun truep (x) (not (not x)))

(defun truthy (x) (not (not x)))

のような関数を作成して利用する人もいるようです。

さらに関数呼び出しのコストが気になる場合は、

(defmacro truep (x) #+development `(not (not ,x)) #-development `,x)

とすることもあるでしょう。また、処理系によっては、(and (member...) t)のようなものを、余計なコストが発生しないようにコンパイルしてくれる処理系もあるようです。

参考