Scheme 是如何抽象数据的?

How does Scheme abstract data?

在静态类型语言中,人们可以使用代数数据类型来抽象数据并生成构造函数,或者使用class、trait和mixin来处理数据抽象。

在动态类型语言中,如Python和Ruby,它们都为用户提供了一个class系统。

但是scheme呢,最简单的函数式语言,最接近λ-calculi,它是如何抽象数据的?

方案程序员通常只是将数据放在列表或 lambda 抽象中,然后编写一些访问器函数使其看起来像树或其他东西吗?就像 EOPL 说的:通过接口指定数据

然后这种抽象技术与抽象数据类型 (ADT) 和对象有何关系?关于 On understanding data abstraction, revisited.

SICP(我猜,EOPL)提倡的只是使用函数来访问数据;那么您总是可以将一组函数切换为另一组函数,实现相同命名的函数集以与另一个具体实现一起工作。 that(即此类函数的集合)构成了“接口”,而 that 是您放入不同源文件中的内容,只需加载适当的代码,您就可以切换具体实现,而所有其他代码 none 更明智。 这就是使它成为“抽象”数据类型的原因。

至于 algebraic 数据类型,旧的准系统 Scheme 方法是创建响应“消息”的闭包(保存和隐藏数据),从而成为“对象”(关于“Scheme mailboxes"). This gives us products, i.e. records, and functions we get for free from Scheme itself. For sum types, just as in C/C++, we can use tagged unions 的一些有纪律的方式(或者,再次隐藏一组“接口”功能背后的细节)。

EOPL 有一种称为“变体情况”的东西,它以类似于模式匹配的方式处理此类总和类型。搜索会出现例如this link

I'm using DrScheme w/ the EOPL textbook, which uses define-record and variant-​case. I've got the macro definitions from the PLT site, but am now dealing with ...

举个例子,这似乎是相关的。