Scheme 方案:添加到记录列表中

Scheme 方案:添加到记录列表中,scheme,racket,Scheme,Racket,我正在为学校做一个计划作业,有一个问题涉及到我们定义一个唱片“类型”(实现为列表)(代表一个音乐唱片) 我遇到的问题是,我被要求创建一个过程来创建这些记录的列表,然后创建一个函数来将记录添加到此列表中。这很简单,但我觉得我可能做错了什么 我知道如何将元素附加到列表(即本例中的记录架)中,但我不确定如何在调用此add函数时正确维护此列表。以下是我得到的: (define (add-record record lst) (append lst (list record))) 正如我所期望的那样

我正在为学校做一个计划作业,有一个问题涉及到我们定义一个唱片“类型”(实现为列表)(代表一个音乐唱片)

我遇到的问题是,我被要求创建一个过程来创建这些记录的列表,然后创建一个函数来将记录添加到此列表中。这很简单,但我觉得我可能做错了什么

我知道如何将元素附加到列表(即本例中的记录架)中,但我不确定如何在调用此
add
函数时正确维护此列表。以下是我得到的:

(define (add-record record lst)
  (append lst (list record)))
正如我所期望的那样,但我的问题是当我调用这个过程时

(define record-self '())
这是我的第一次尝试,但当然,每次我使用
addrecord
过程添加记录时,传入刚刚定义的
recordshelf
列表,那么,我的add函数将返回一个全新的列表(即,一个带有附加记录的副本)。这是有道理的,但我不确定这是否是我想要的

因此,如果我想向列表中添加一组记录,如下所示:

(add-record highway61 record-shelf)
(add-record sgtPepper record-shelf)
当然,它不会产生我想要的结果,因为
record shelf
不会得到更新。我不认为在这一点上,我们应该使用
set或作业


我是否应该每次都获取一份返回列表的副本(从
添加记录
),然后在下一次调用中使用该返回列表?

您希望有状态行为。正如恩里克所说,你最后一个问题的答案是肯定的

有什么理由你不能把新记录排在榜首?这是在Lisp中将项目添加到列表中的惯用方法。或任何使用单链表的函数式语言

(define (add-record record lst)
  (cons record lst))

(define newshelf (add-record 36chambers oldshelf))

在调用
添加记录
后,如果不使用
设置,则无法使
记录架
包含新项目以某种形式。

在函数式编程中,应避免使用全局变量。最后一个问题的答案是“是”<代码>(addrecordsgtpepper(addrecordhighway61记录架))
顺便提一下,这个问题表达得很好。