Scheme drRacket:关于列表
所以我有三张清单Scheme drRacket:关于列表,scheme,racket,Scheme,Racket,所以我有三张清单 (define list1 '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 15 16 17 18 19 20)) (define list2 '(2 5 6 8 10)) (define list3 '(1 4 8 9 13 15 18 19 20 25 27 29 )) 因此,列表1是一个包含1到20的列表 我想做的是,如果我想 列表1-列表2='(1 3 4 6 7 9 11 12 14 15 16 18 19 20) 或者, 列表1-列表3
(define list1 '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 15 16 17 18 19 20))
(define list2 '(2 5 6 8 10))
(define list3 '(1 4 8 9 13 15 18 19 20 25 27 29 ))
因此,列表1是一个包含1到20的列表
我想做的是,如果我想
列表1-列表2='(1 3 4 6 7 9 11 12 14 15 16 18 19 20)
或者,
列表1-列表3=(2 3 5 6 10 11 12 14 16 17)
我尝试使用列表的长度,但不起作用,但我希望保留所有list1值,list3中的重复值除外
还有,我想做什么
list1-list2然后,将list1-list2的结果存储在list1上,然后执行另一个减法,如
有人能给我一些解决办法吗?非常感谢你 我们可以取消第2步“将#1的结果存储在列表1中”吗?那种突变只会让我得麻疹 我认为您只是试图从列表1中删除列表2和列表3中的元素。您可以这样做:
(remove* (append list2 list3) list1)
收益率
'(3 7 11 12 14 16 17)
你在研究集合论吗?如果是这样,(remove*)解决了问题,但它不是描述集合差异的过程 设置差异是\B的定义是:
A\B={x,这样x在A中而x不在B}
因此,您需要一个过程来告诉您元素是否在列表中。那么您的差异
代码如下所示:
(define difference
(λ (A B)
(remove* (list #f) (map
(λ (x)
(if (not (in x B))
x
#f
)) A))))
在上面的例子中,我使用remove*,我认为它不是很优雅,所以为什么不尝试递归呢?最后是球拍:)
请注意,在difference2
中,我没有使用映射或删除
reverse
功能仅用于您希望对结果进行排序的情况
分析这两个例子,试着理解我在做什么,然后发布你的结果
让我们知道任何疑问
编辑:
哦,还有一个问题,就是把操作的值赋值给另一个变量(C++类),你可以像C++那样做。p
范例
(define C (sum A B))
或
这是一个很好的答案,但是要求用户改变他试图解释其想法的方式,而不给他一个应该如何做的提示,是没有用的。在您给我的第二个示例中,((不是(在(汽车a)B中))(差异2(cdr a)B(cons(汽车a)res)))是的,它是未绑定的,因为我希望您对其进行编码。想象一下,就像你在盒子里寻找一个特定的玩具,你拿起你抓到的第一件东西,检查它是否是你要找的,如果不是,扔掉它,继续盒子里的其他玩具(检查),直到你完成为止。让我们知道任何疑问!还可以尝试使用递归对其进行编码,就像我给您的第二个代码示例一样。
(define C (sum A B))
(define foo (+ (* pi x) (* 6 sigma)))