方案:添加到记录列表

时间:2011-10-21 01:22:19

标签: scheme racket

我正在为学校开展一项计划任务,并且有一个问题涉及我们定义记录“类型”(实现为列表)(代表音乐记录)。

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

我知道如何将一个元素附加到列表(即本例中的记录架),但我不确定如何在此add函数的调用中正确维护此列表。这就是我所拥有的:

(define (add-record record lst)
  (append lst (list record)))

这是我所期望的,但我的问题是当我调用这个程序时。

(define record-self '())

是我的第一次尝试,但当然每次我使用add-record程序添加记录时,传入刚刚定义的record-shelf列表,我的添加功能会返回一个全新的列表(即副本,附加记录)。这是有道理的,但我不确定这是不是我想要的。

所以,如果我想在列表中添加一堆记录,如下所示:

(add-record highway61 record-shelf)
(add-record sgtPepper record-shelf)

当然它不会产生我想要的东西,因为record-shelf没有得到更新。我不认为在课程的这一点上我们应该使用set!或作业。

我是否应该每次都抓取返回列表的副本(来自add-record),然后在下次调用时使用返回的列表?

1 个答案:

答案 0 :(得分:3)

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

是否有理由不能将新记录cons列入名单的头部?这是将项添加到Lisp列表中的惯用方法。或者使用任何使用单链表的功能语言。

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

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

在您以某种形式使用record-shelf调用add-record之后,无法让set!包含新项目。