【发布时间】:2018-04-09 02:35:58
【问题描述】:
我一直找不到任何内置方法来检查某项是否是有效的类型说明符。
这样的谓词存在吗?
(我自己会做一个,但是很遗憾,将不是类型说明符的东西传递给 typep 的后果是不确定的。根据超规范,check-type 没有异常情况。)
【问题讨论】:
标签: types common-lisp predicate
我一直找不到任何内置方法来检查某项是否是有效的类型说明符。
这样的谓词存在吗?
(我自己会做一个,但是很遗憾,将不是类型说明符的东西传递给 typep 的后果是不确定的。根据超规范,check-type 没有异常情况。)
【问题讨论】:
标签: types common-lisp predicate
您可以使用 Tomohiro Matsuyama 的 trivial-types 系统 (LLGPL),其中定义了一些特定于实现的谓词的包装器:
(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)))
【讨论】:
要扩展existing answer 以支持CLISP,请使用
#+clisp (null (nth-value 1 (ignore-errors (ext:type-expand type-specifier))))
【讨论】: