List 《球拍》中两张单子的比较

List 《球拍》中两张单子的比较,list,racket,equality,List,Racket,Equality,Racket中是否有一个内置函数,我们可以用它来检查两个列表中的值是否相等,而不是值的顺序 例如,如果将“(1 2 3 4 5)与“(3 1 2 5 4)进行比较,则应返回true 或者,实现这种功能最简单的方法是什么?如果出现的次数无关紧要,那么您正在进行集合比较。可以将列表转换为集合,然后比较集合: > (equal? (list->set '(1 2 3 4 5)) (list->set '(5 4 3 2 1))) #t 如果出现的次数确实重要,那么您正在进行多集比较

Racket中是否有一个内置函数,我们可以用它来检查两个列表中的值是否相等,而不是值的顺序

例如,如果将“(1 2 3 4 5)与“(3 1 2 5 4)进行比较,则应返回true


或者,实现这种功能最简单的方法是什么?

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

> (equal? (list->set '(1 2 3 4 5)) (list->set '(5 4 3 2 1)))
#t

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

> (equal? (sort '(3 2 1 4 5) <) (sort '(2 1 3 4 5) <))
#t
> (equal? (sort '(1 2 1) <) (sort '(2 1) <))
#f

>(相等?(排序’(3 2 1 4 5)谢谢。但此解决方案中的问题是,如果列表中有重复项,该怎么办?例如,将’(1 2 1)与’(2 1)进行比较@Elik您在问题中没有提到重复项,您的示例也没有重复项。svk回答了您提出的问题,并给出了两种方法。您可以在堆栈溢出中搜索“[racket]删除重复项”,并将其与他的回答结合起来。@Greg Hendershott,我认为我的问题是一个一般性的问题。svk一开始没有提到第二种解决方案,他在我的评论之后编辑了他的评论。你不必在这里写任何错误的假设。@Elik这不是假设;你的问题和例子根本不涉及duplicates。在这种情况下,您可以编辑您的问题,以提供一个重复的示例和预期/期望的结果。如果您这样做,svg可能会重新回答它。(或者可能不会,您需要按照我的建议,自己搜索最后一部分。)@Elik:我同意Greg的观点。在你的问题中包括它:省略它会导致隐含的结果。而且有一些可以论证的有效方法将重复项视为单个条目!如果这对你很重要,请在问题中明确说明。要把它放在编程方面:你需要展示更多的测试用例。