【发布时间】:2012-12-17 22:14:44
【问题描述】:
我正在为学校做一个计划任务,有一个问题涉及我们定义一个记录“类型”(实现为一个列表)(它代表一个音乐记录)。
我遇到的问题是我被要求创建一个创建这些记录列表的过程,然后是一个将记录添加到该列表的函数。这很简单,但我觉得我可能做错了什么。
我知道如何将元素附加到列表(即本例中的记录架),但我不确定如何在调用此 add 函数时正确维护此列表。这是我得到的:
(define (add-record record lst)
(append lst (list record)))
按我的预期工作,但我的问题是当我调用此过程时。
(define record-self '())
这是我的第一次尝试,但当然每次我使用 add-record 过程添加记录时,传入刚刚定义的 record-shelf 列表,我的 add 函数返回一个全新的列表(即副本,附上记录)。这是有道理的,但我不确定这是否是我想要的。
所以如果我想像这样向列表中添加一堆记录:
(add-record highway61 record-shelf)
(add-record sgtPepper record-shelf)
当然它不会产生我想要的结果,因为record-shelf 没有得到更新。而且我认为目前在课程中我们不应该使用set! 或作业。
我是否应该每次都获取返回列表的副本(来自add-record),然后在下一次调用中使用该返回列表?
【问题讨论】:
-
在函数式编程中你应该避免使用全局变量。所以你最后一个问题的答案是“是”。
(add-record sgtPepper (add-record highway61 record-shelf)) -
顺便说一句,问题表达得很好。