【问题标题】:Remove empty list from list of list in Scheme从 Scheme 中的列表列表中删除空列表
【发布时间】:2014-01-06 11:16:59
【问题描述】:

我有一个列表列表,我想从中删除所有空列表。

我的名单是(("O") ("O") ())

如果我这样做

(remove '() '(("O") ("O") ()))

我得到了正确的输出(("O") ("O"))

但使用remove*(从文档中删除所有出现)我得到相同的输入列表,即:

(remove* '() '(("O") ("O") ())) 

还给我

(("O") ("O") ())

我做错了什么?

【问题讨论】:

  • 它适用于(filter (lambda (element) (not (empty? element))) list))) ,但仍然不知道remove* 有什么问题
  • 我看到您已经回答了这个问题,但是由于“关于您编写​​的代码问题的问题必须描述具体问题 - 并包括有效的代码来重现它 - 在问题本身中,”您能否也展示一个 remove* 的示例来演示意外结果?
  • 不确定我是否理解你的意思@JoshuaTaylor,但我已经编辑了这个问题。现在正确吗? (无论如何感谢commnet)
  • 之前是正确的,但现在它有更多的上下文并显示了意外的输出是什么。我希望这可能使 未来 用户更容易找到问题及其答案。谢谢!

标签: list scheme racket removeall empty-list


【解决方案1】:

首先,remove* 在 Scheme(R5RS、R6RS、R7RS)中不存在。 remove 确实存在于 R6RS 中并且可以为所欲为:

#!r6rs
(import (rnrs))
(remove '() '(() (1) (2) () ())) ;==> ((1) (2))

在方案方言 Racket 中,您同时拥有 removeremove*,而且您似乎正在使用球拍,因为它确实按照您描述的方式工作。 remove* 获取要删除的项目列表。因此,#!R6RS 中的(remove '() lst)#!racket 中的(remove* '(()) lst) 相同。 remove* 似乎是为了删除所有匹配的元素:

(remove* '(() (2)) '(() (1) (2) () ())) ; ==> ((1))

【讨论】:

  • 感谢您的澄清,是的,我确实在使用 DrRacket(相当大)
猜你喜欢
  • 2017-11-02
  • 2022-11-01
  • 2012-11-13
  • 2016-02-17
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
相关资源
最近更新 更多