如何在 Common Lisp 中声明列表类型?

How to declare the list type in Common Lisp?

我找到了所有 Type Specifiers 的普通 lisp。里面有list。但是在 Common Lisp 中没有像数组那样声明 list 的例子,(declare (array fixnum 10)).

那么,声明列表类型说明符的正确方法是什么?谢谢

LIST 类型说明符没有内置的方式来指定列表元素的类型。它只是 (OR CONS NULL).

的缩写

您可以使用DEFTYPE定义一个类型说明符,使用SATISFIES指定元素类型,如The Common Lisp的Type System页所示食谱.

(defun list-of-strings-p (list)
  "Return t if LIST is non nil and contains only strings."
  (and (consp list)
       (every #'stringp list)))

(deftype list-of-strings ()
  `(and list (satisfies list-of-strings-p)))