在Racket中是否有内置函数我们只能根据值来检查两个列表的相等性,而不是值的顺序,用?
例如,如果将'(1 2 2 3 4 5)与'(3 1 2 5 4)进行比较,它应该返回true。
或者实现这样一个功能的最简单方法是什么?
答案 0 :(得分:10)
如果出现的次数无关紧要,那么您正在进行设置比较。您可以将列表转换为集合,然后比较集合:
> (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