gpt4 book ai didi

方案:添加到记录列表

转载 作者:行者123 更新时间:2023-12-02 05:49:22 26 4
gpt4 key购买 nike

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

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

我知道如何将元素附加到列表(即本例中的记录架),但我不确定如何在调用此 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 没有更新。我认为在类(class)的这一点上我们不应该使用 set! 或作业。

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

最佳答案

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

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

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

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

在调用 add-record 后,如果不以某种形式使用 set! ,就无法使 record-shelf 包含新项目.

关于方案:添加到记录列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7844057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com