【问题标题】:Common Lisp: How to check if something is a type specifier?Common Lisp:如何检查某物是否是类型说明符?
【发布时间】:2018-04-09 02:35:58
【问题描述】:

我一直找不到任何内置方法来检查某项是否是有效的类型说明符。

这样的谓词存在吗?

(我自己会做一个,但是很遗憾,将不是类型说明符的东西传递给 typep 的后果是不确定的。根据超规范,check-type 没有异常情况。)

【问题讨论】:

    标签: types common-lisp predicate


    【解决方案1】:

    您可以使用 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)))
    

    【讨论】:

      【解决方案2】:

      要扩展existing answer 以支持CLISP,请使用

      #+clisp (null (nth-value 1 (ignore-errors (ext:type-expand type-specifier))))
      

      Type Specifiers

      【讨论】:

      • 我可能会为此提交 PR,除非您愿意这样做。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多