我正在为学校开展一项计划任务,并且有一个问题涉及我们定义记录“类型”(实现为列表)(代表音乐记录)。
我遇到问题的问题是我被要求创建一个创建这些记录列表的过程,然后创建一个将记录添加到此列表的函数。这很简单,但我觉得我可能做错了。
我知道如何将一个元素附加到列表(即本例中的记录架),但我不确定如何在此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
),然后在下次调用时使用返回的列表?
答案 0 :(得分:3)
你希望有状态的行为。正如恩里克所说,你上一个问题的答案是肯定的。
是否有理由不能将新记录cons
列入名单的头部?这是将项添加到Lisp列表中的惯用方法。或者使用任何使用单链表的功能语言。
(define (add-record record lst)
(cons record lst))
(define newshelf (add-record 36chambers oldshelf))
在您以某种形式使用record-shelf
调用add-record
之后,无法让set!
包含新项目。