如何在 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)))
我找到了所有 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)))