2

我试图在 Scheme 中创建一个类似数组的数据结构,因为我需要经常引用它(并改变它!),所以我想给它一个名字。但从我在各种教程网站上阅读的内容来看,似乎唯一命名列表以供以后参考的方法是使用define. 这很好,除了它看起来像一旦我用 初始化一个列表define,改变或添加到所述列表变得更加复杂。例如,我似乎无法做到(append wordlist (element)),我需要某种方式!砰。

基本上我的问题归结为:define我唯一的希望是命名一个列表吗?如果是这样,我是否被困在改变其元素的圈套中?谢谢。

4

3 回答 3

2

是的,这define是在 Scheme 中命名事物方式。Scheme 中的普通列表不允许您更改其元素,因为它是不可变的 - 这是您在使用函数式数据结构时必须学习的内容之一。当然,您可以向其中添加元素或删除元素,但是这些操作会产生新的列表,您不能就地更改元素。

另一种选择是使用可变列表而不是普通列表,但如果您只是学习使用 Scheme,最好先坚持使用不可变列表,然后学习使用不可变数据的 Scheme 方法。

于 2012-04-02T22:57:35.383 回答
1

是的,define 是在 Scheme 中进行“赋值”(真正命名)的方式。但是,如果您正在编写某种包,您可能会考虑将整个内容包装在一个函数中,然后使用 let 来定义您引用的内容。

然后,当然,你必须有某种抽象来解开你的“包”中的函数。

请参阅 SICP 2.5 使用通用操作构建系统

http://mitpress.mit.edu/sicp/full-text/book/book-ZH-18.html#%_sec_2.5

于 2012-04-03T03:51:06.387 回答
0

(append wordlist (element))正在创建一个新列表。您可能想要使用set!重定向对新列表define的引用,或使用相同符号名称对新列表的引用。

于 2012-04-02T22:51:36.097 回答