我再次提出我的奇怪计划问题。
我有一个定义,从列表中删除子元素(基于搜索匹配)并生成没有它的新列表(基于此答案here)。
(func '1 mylist) ; will return mylist without all sublists containing 1
一切正常,直到我意识到我需要为另一个列表中的每个元素重复我的定义。
我递归地调用它,但是每次调用我都使用原始列表,而不是之前的过滤。
或者用另一个词我想实现这个目标:
(define filterList '(1 2 3))
(func '3 (func '2 (func '1 mylist) ); list without all sublists containig 1 2 3
我总是卡住了。谢谢大家的帮助。
答案 0 :(得分:2)
这是要从初始列表(lst)中删除的元素列表(elts)的基本循环:
(define (func2 elts lst)
(if (null? elts)
lst
(func2 (cdr elts) (func (car elts) lst))))
然后
(func2 '(1 3) '(1 2 3))
=> '(2)
或者,在球拍中:
(define (func2 elts lst)
(for/fold ((res lst)) ((e (in-list elts)))
(func e res)))