【发布时间】:2011-08-21 12:41:21
【问题描述】:
我想测试列表之间的相等性,但我真的只关心成员是否相同,而不是排序。有没有简单的运算符来检查这个?
一个简单的例子
(my-equal? (a b) (b a))
应该返回#t。
显然,这个特殊的例子可以很容易地通过检查两个列表然后反转第二个并再次检查来完成
(or (equal? (a b) (b a)) (equal? (a b) (reverse (b a)))
但是有一般的方法吗?我可以尝试编写一个函数,但我只能想象一些相当复杂的东西可以完成这项工作。我猜这一定是一个相当普遍的需求,我想知道 scheme 是否有一个内置的操作符可以在这里完成工作。
我正在使用 mit-scheme 9.0.1
【问题讨论】:
-
请记住,在Scheme ... list 数据结构中写入(list 7 8) 或(cons 9 (cons null))。也许你应该写一个哈希映射来实现Set。从那里你可以建立起来。
-
一个未指明的问题是您是否会考虑像 '(1 1 2) 和 '(2 1) 这样的列表是否相等。换句话说,重复是否有意义?
-
@john 如果是基本集,那么不,不应该计算重复。