作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何将列表发送到单独的函数/过程,从列表中删除项目,更新新列表(删除项目),并从第一个函数/过程显示它。
另外,我知道你可以使用 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/
我是一名优秀的程序员,十分优秀!