在Racket中是否有内置函数,我们可以仅根据值而不是值的顺序来检查两个列表的相等性,用?
例如,如果将'(1 2 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