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记录架))
顺便提一下,这个问题表达得很好。