比较Racket中的两个列表

Eli*_*lik 2 equality list racket

在Racket中是否有内置函数,我们可以仅根据值而不是值的顺序来检查两个列表的相等性,用?

例如,如果将'(1 2 2 3 4 5)与'(3 1 2 5 4)进行比较,它应该返回true.

或者实现这样一个功能的最简单方法是什么?

svk*_*svk 10

如果出现次数无关紧要,那么您正在进行集合比较.您可以将列表转换为集合,然后比较集合:

> (equal? (list->set '(1 2 3 4 5)) (list->set '(5 4 3 2 1)))
#t
Run Code Online (Sandbox Code Playgroud)

如果出现次数很重要,那么您正在进行多重比较.对常见类型的值执行此操作的一种简单方法是对两个列表进行排序,然后以通常的方式比较它们的相等性:

> (equal? (sort '(3 2 1 4 5) <) (sort '(2 1 3 4 5) <))
#t
> (equal? (sort '(1 2 1) <) (sort '(2 1) <))
#f
Run Code Online (Sandbox Code Playgroud)

  • @Elik你没有在你的问题中提到重复,你的例子没有重复.svk回答了你问的问题 - 给了你两种方法.您可以搜索Stack Overflow"[racket]删除重复项",并将其与他的答案结合起来. (3认同)