有没有办法在Scheme中将列表转换为集合?

jon*_*nes 4 lisp scheme

我想测试列表之间的相等性,但我实际上只关心成员是否相同,而不关心顺序。有没有简单的运算符可以检查这一点?

一个相当简单的例子

(my-equal? (a b) (b a))
Run Code Online (Sandbox Code Playgroud)

应该返回#t。

显然,这个特定的例子可以通过检查两个列表然后反转第二个列表并再次检查来轻松完成

(or (equal? (a b) (b a)) (equal? (a b) (reverse (b a)))
Run Code Online (Sandbox Code Playgroud)

但有没有通用的方法呢?我可以尝试编写一个函数,但我只能想象一些非常复杂的东西来完成这项工作。我猜这一定是一个相当普遍的需求,我想知道方案是否有一个内置的运算符可以在这里完成工作。

我正在使用 mit-scheme 9.0.1

zw3*_*324 5

如果您的实施具有可用的SRFI 1,则可以lset=实现您想要的:

对列表进行设置操作

  • 请注意,这并不是“将列表转换为集合”——它只是将列表“视为”集合。(这对于某些有限的情况很有用。) (2认同)