是否存在与list-ref相反的任何内容,而不是选择要添加到列表中的某些值,它是否会从列表中取出值?
我基本上想做以下事情
(list 1 2 3 4 5 6 7) (list 3 6 7) -> (list 1 2 4 5)
列表2中的值从列表1中删除。 (优选的)
因为我总是从一个从1到n的列表开始, 第二个列表还可以表示应该删除列表1上的数字的位置/位置。 (不太喜欢)
我正在尝试创建一个代码来操作其他函数来提供这些列表,所以请清楚代码中每个列表的“提及”,因为如果人们使用xy和z,我有时会感到困惑所以有多个lambda,本地定义等。
我在这里有一些与我想要的相反的东西,我一直试图改变它,所以不是输出y上的x元素,而是给出x上不在y上的元素。 / p>
(define (selection x y)
(filter (lambda (e2)
(ormap (lambda (e1) (equal? e1 e2))
y))
x))
示例:
(list 1 2 3 4 5 6 7 8 9 10)
(list 2 4 6 8 10))
-> (list 2 4 6 8 10))
有人对如何将输出更改为我需要的任何想法吗?
答案 0 :(得分:2)
听起来你正在使用list
作为集合。您可以改为使用Racket set
,并使用set-subtract
函数:
#lang racket
(set-subtract (set 1 2 3 4 5 6 7)
(set 3 6 7))
;; => (set 1 2 4 5)
答案 1 :(得分:2)
答案 2 :(得分:0)
这是一个简单的递归函数,可以达到你想要的效果:
(define remove-list-from-list (lambda (list remlist)
(cond
[(null? list) '()]
[(member (car list) remlist) (remove-list-from-list (cdr list) remlist)]
[else (cons (car list) (remove-list-from-list (cdr list) remlist))])))
现在您可以这样使用它:
> (remove-list-from-list (list 1 2 3 4 5 6 7) (list 3 6 7))
'(1 2 4 5)