Common Lisp:如何检查某物是否是类型说明符?
Common Lisp: How to check if something is a type specifier?
我一直找不到任何内置方法来检查某物是否是有效的类型说明符。
这样的谓词存在吗?
(我会自己做一个,但是,唉,将不是类型说明符的东西传递给 typep
的后果是未定义的。根据 hyperspec,check-type
没有异常情况。)
您可以使用 Tomohiro Matsuyama 的 trivial-types
系统 (LLGPL),它定义了一些 implementation-specific 谓词的包装器:
(defun type-specifier-p (type-specifier)
"Returns true if TYPE-SPECIFIER is a valid type specfiier."
(or (documentation type-specifier 'type)
#+sbcl (sb-ext:valid-type-specifier-p type-specifier)
#+openmcl (ccl:type-specifier-p type-specifier)
#+ecl (c::valid-type-specifier type-specifier)))
要扩展 to support CLISP,请使用
#+clisp (null (nth-value 1 (ignore-errors (ext:type-expand type-specifier))))
我一直找不到任何内置方法来检查某物是否是有效的类型说明符。
这样的谓词存在吗?
(我会自己做一个,但是,唉,将不是类型说明符的东西传递给 typep
的后果是未定义的。根据 hyperspec,check-type
没有异常情况。)
您可以使用 Tomohiro Matsuyama 的 trivial-types
系统 (LLGPL),它定义了一些 implementation-specific 谓词的包装器:
(defun type-specifier-p (type-specifier)
"Returns true if TYPE-SPECIFIER is a valid type specfiier."
(or (documentation type-specifier 'type)
#+sbcl (sb-ext:valid-type-specifier-p type-specifier)
#+openmcl (ccl:type-specifier-p type-specifier)
#+ecl (c::valid-type-specifier type-specifier)))
要扩展
#+clisp (null (nth-value 1 (ignore-errors (ext:type-expand type-specifier))))