gpt4 book ai didi

list - 如何更新 Scheme (Racket) 中的列表

转载 作者:行者123 更新时间:2023-12-05 00:00:20 25 4
gpt4 key购买 nike

如何将列表发送到单独的函数/过程,从列表中删除项目,更新新列表(删除项目),并从第一个函数/过程显示它。

另外,我知道你可以使用 set!更新列表,但我一直看到手册说使用 set!不是“计划方式”。

但是,我不明白除了这种方式之外如何创建这个程序(这不起作用):

#lang racket

(define list1 '("read" "id" "$$"))

(define (displayer list1)
(remover list1)
(newline)
(display list1)) ;also doesn't display updated list here

(define (remover list1)
(remove "$$" list1)
(display list1)) ;doesn't display updated list here

谢谢!

最佳答案

正如问题中所述,这真的,真的不是在Scheme中做事的方式;不过,您可以通过 set! 实现您在 Racket 中的要求。 - 进行全局定义并选择允许重新定义初始绑定(bind)的语言 - 您必须弄乱语言设置的事实应该是一个非常明显的迹象,表明您做错了。

无论如何,方法如下:

(define list1 '("read" "id" "$$"))

(define (displayer)
(remover)
(newline)
(display list1))

(define (remover)
(set! list1 (remove "$$" list1))
(display list1))

(displayer)
> (read id)
> (read id)

更惯用的方法是避免定义全局变量以在过程中修改它们;而是每次需要修改列表时创建一个新列表( remove 创建一个新列表)并传递它,如下所示:
(define (displayer lst)
(let ((removed (remover lst)))
(newline)
(display removed)))

(define (remover lst)
(let ((removed (remove "$$" lst)))
(display removed)
removed))

(define list1 '("read" "id" "$$"))
(displayer list1)
> (read id)
> (read id)

请注意,第二个解决方案不会修改 list1 ,这是解决问题的功能性方法。

关于list - 如何更新 Scheme (Racket) 中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10360395/

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