gpt4 book ai didi

common-lisp - 类型说明符可以指定等于任意值吗?

转载 作者:行者123 更新时间:2023-12-02 21:49:59 26 4
gpt4 key购买 nike

Common Lisp 类型说明符似乎非常灵活,尽管我没有看到任何表明它们可以是任意谓词的内容(如果不是的话也可以理解,因为在一般情况下类型检查将是不可判定的)。但他们可以指定等于任意值吗?

整数?我想是这样; (integer 42 42) 应该涵盖这一点。

字符串“foo”

符号'foo

通过(defconstant foo (gensym))获得的符号?

如果是这样,语法是什么?

最佳答案

您可以将任何您想要的谓词放在 SATISFIES 下类型。

(defun squarep (rect)
(= (height rect)
(width rect)))

(deftype square () '(satisfies squarep))

这些类型不太可能在编译时进行验证。您需要使用这样的类型来声明变量始终等于给定的字符串值或任何其他复杂数据。

对于与 EQL 相当的值,您可以使用 EQLMEMBER类型说明符。

(deftype foo-symbol () '(eql foo))
(deftype states () '(member :ready :working :error))

常量按同一性进行比较,您可以定义:

(defconstant +foo+ (gensym))
(deftype foo-constant () `(eql ,+foo+))

关于common-lisp - 类型说明符可以指定等于任意值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52123792/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com