Common Lisp 和 Scheme 中的 deftype 的区别

Difference between deftype in Common Lisp and Scheme

我正在尝试将一些 Common Lisp 代码翻译成 Scheme 代码。 Common Lisp 代码有一个 deftype。 Scheme 中的 deftype 与 Common Lisp 中的 deftype 相同吗?如何将 Common Lisp 中的 deftype 翻译成 Scheme 中的等效代码?


正如 Anton 所说,没有完全等同于 Common Lisp deftype 的 Scheme。请参阅clhs:类型说明符描述类型说明符可以在常见的lisp中的描述。这些用于声明、数组类型规范、结构和 CLOS 槽规范、通用函数参数特化等。将其移植到 Scheme 通常将是一个巨大的挑战。您最好的希望是deftype定义的类型仅限于漫步(或根本不是!)。


公共LISP deftype不具有精确的方案等价物。您必须手动翻译类型定义,或者根据系统中可用的任何 Scheme 记录库编写一个 deftype 宏。

裸露的方案并不具有用户定义的类型。在 R5RS 系统中,您必须查找相关的 SRFI(例如 SRFI-9(记录类型)、SRFI-57 记录、SRFI-99 ERR5RS 记录),并查看您的特定 Scheme 系统实现了哪些 SRFI 和语言扩展; Scheme 系统在实现超出最低 Scheme 标准的任何内容时通常都不是很一致。 R6RS Scheme 在其标准库中有记录。