Можно ли определить рекурсивный тип в Common Lisp?

Рекурсивный тип - это тип, у которого есть база и рекурсивный регистр.

Я хотел, чтобы это реализовало «типизированные списки», то есть списки, в которых допускается только один и тот же тип элемента или ноль.

Я попробовал следующее определение:

(deftype list-of (a) `(or null
                          (cons ,a (list-of ,a))))

Однако это сигнализирует о проблеме исчерпания стека (по крайней мере, в SBCL) из-за того, что компилятор пытается бесконечно повторять списки. Можно ли определить такой тип данных?

Ответы на вопрос(2)

Ваш ответ на вопрос