Я недавно писал в англоязычном чате про Emacs, что написал себе определятор предикатов, которые возвращают обобщенные booleans.
Типа, (define-predicate+ consp)
определит предикат consp+
, такой что (consp+ x)
вычислится в x если x это cons
.
Мало того, что эти предикаты чертовски полезны, — они еще и компилируются в чуточку более эффективный код, чем исходные предикаты, во всяком случае если использовать нынешний sbcl на amd64. Это естественно: вернуть то, что уже есть среди параметров функции, проще, чем отдельно генерить t.
Так что жаль, что consp, integerp
и некоторые прочие не возвращают обобщенные booleans по умолчанию.