common-lisp - 类型说明符可以指定与任意值相等吗?
问题描述
Common Lisp 类型说明符似乎非常灵活,尽管我没有看到任何表明它们可以是任意谓词的东西(如果不是可以理解的,因为在一般情况下类型检查将是不确定的)。但是他们可以指定任意值的相等性吗?
一个整数?我认同; (integer 42 42)
应该涵盖这一点。
字符串"foo"
?
符号'foo
?
获得的符号(defconstant foo (gensym))
?
如果是这样,语法是什么?
解决方案
您可以将所需的任何谓词放在SATISFIES
类型下。
(defun squarep (rect)
(= (height rect)
(width rect)))
(deftype square () '(satisfies squarep))
这些类型不太可能在编译时得到验证。您需要使用这种类型来声明变量始终等于给定的字符串值或任何其他复杂数据。
对于与 可比较的值EQL
,您可以使用EQL
orMEMBER
类型说明符。
(deftype foo-symbol () '(eql foo))
(deftype states () '(member :ready :working :error))
常量按身份进行比较,您可以定义:
(defconstant +foo+ (gensym))
(deftype foo-constant () `(eql ,+foo+))
推荐阅读
- python - 散点图中的 y 轴不是单调的
- java - 如何做feign客户端接口的构造函数注入?
- html - 引导拨动开关在桌子上不起作用
- multithreading - 多处理器和多核处理器的用途
- azerothcore - 我的 db_assembler 有问题。找不到bash mysqladmin
- ionic-framework - ionic 5 modal 有时不显示图像
- prestashop - 我想在 prestashop 1.6 中编辑 category.tpl 并在类别页面上显示产品价格范围低价、平均和高价
- amazon-web-services - 连接到 AWS Client VPN 的客户端的固定 IP
- javascript - Javascript中的切片方法索引问题
- php - WordPress:查询一个术语内的所有帖子,以及可能在不同术语中的 ID 特定帖子