list - SCHEME - 比较列表并仅返回未出现在第二个列表中的值
问题描述
我很难调试这段代码,并希望有人能够帮助处理伪代码或类似问题的示例。提前谢谢你!
定义一个非递归 Scheme 过程(remove-them2 lst n) ,它返回lst中所有未出现在列表 n 中的元素的列表。
这是我到目前为止所拥有的:
(define (remove-them2 lst n)
(if (null? lst)
n
(let ((tail (remove-them2 cons((cdr lst) (cdr n)))))
(if (member (car lst) (car n) tail)
tail
(cons (car lst) (car n) tail)))))
解决方案
在不知道您被允许使用的语言的哪个子集的情况下,很难合理地回答这个问题。
我假设你想要一些不是语法递归的东西(所以你不能使用带有累加器的函数:我不确定这个词的正确含义),你可以使用map
and append
,但是你'不允许使用filter
,因为这似乎是一个直接的答案。
有了这些限制,您可以这样做:
(define (remove-them2 l baddies)
(apply append (map (lambda (e)
(if (memv e baddies)
'()
(list e)))
l)))
我认为这是非常人为和可怕的,但它可以工作(在像 CL 这样的语言中它不能移植工作,这就是为什么我认为它很可怕)。
推荐阅读
- python - UnicodeDecodeError:“utf-8”编解码器无法解码字节 0xf8,同时将 sql 转储转换为 csv
- angular - 在 Angular 9 中,如何为页面实现 onblur 处理程序?
- angular - 如何在 Angular 10 中使用 forkJoin 订阅数据?
- git - 在 s3 上备份所有我的 git repos 备份的最佳做法是什么?
- python - 计算字典中的特定单词
- ruby-on-rails - 在 Rails 开发环境中允许不安全的脚本
- .net-core - 如果我们已经应用了数据库优先方法,当我们需要另一个表和模型时该怎么办?(.NET 核心,MVC)
- python - 解决问题 - 编码面试问题
- python - JSON 值无法转换为 System.Int32 python POST
- docker - 在 Jenkins 管道中运行 Docker 命令