enums - 等同于 C 枚举的 Common Lisp

标签 enums lisp common-lisp

我最近正在尝试学习一些 Lisp(Common Lisp),我想知道是否有一种方法可以像在 C 中通过枚举那样为常量命名。

我不需要枚举的完整功能集。最后,我只想拥有快速可读的代码。

我尝试过全局变量和小函数,但总是伴随着性能下降。将数字插入代码总是更快。

最佳答案

在 Lisp 中进行枚举的正常方法是使用符号。符号被固定(替换为指向它们在符号表中的条目的指针),因此它们与整数一样快,并且与其他语言中的枚举常量一样可读。

那么你可以在 C 中的什么地方写:

enum {
   apple,
   orange,
   banana,
};

在 Lisp 中,您可以直接使用 'apple'orange'banana

如果你需要一个枚举的类型,那么你可以用deftype定义一个。 :

(deftype fruit () '(member apple orange banana))

然后你可以在declaretypeptypecase等中使用类型fruit,< del>并且您可以编写专门针对该类型的通用函数。

关于enums - 等同于 C 枚举的 Common Lisp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/578290/

相关文章:

c++ - 如何将无效的用户输入与枚举列表中的最后一个值映射?

scheme - Racket 上的回溯问题

Lisp:高级字符串比较

common-lisp - 口齿不清 : Having Trouble with Conditionals

java - 消息包中的枚举标签

grails - 带有枚举的Grails JSON单元格

c# - 枚举描述到字符串

lisp - 使用 asdf :defsystem and quickproject 定义包的正确方法

macros - 在 Common Lisp 包中导出照应宏

lisp - 在 DO 运行之前调用 EVAL 在 DO 的结果部分进行评估