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

ccQ*_*ein 1 common-lisp

我找到了通用 lisp 的所有类型说明符。还有就是list里面。但是list在 Common Lisp 中没有象数组那样声明的例子,(declare (array fixnum 10)).

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

Bar*_*mar 6

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

您可以使用DEFTYPE定义一个类型说明符,该说明符指定使用的元素类型SATISFIES,如Common Lisp Cookbook类型系统页面所示。

(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)))
Run Code Online (Sandbox Code Playgroud)