相关疑难解决方法(0)

比较集合的函数; 有助于提高效率

我正在尝试编写一个比较两个列表的函数,看它们是否代表相同的集合.这是'(a b c d d)'(d c b a d)代表同一组.元素可以是任何顺序.

这就是我所拥有的,它有效:

(defun samesetp (list1 list2)
  (cond
    ((null list1) (null list2))
    ((eq list2 (remove (car list1) list2 :count 1)) nil)
    (t (samesetP (cdr list1) (remove (car list1) list2 :count 1))))))
Run Code Online (Sandbox Code Playgroud)

我不喜欢这个的原因(remove (car list1) list2 :count 1))是计算两次 - 一次测试remove操作是否真正删除了任何东西,一次递归测试列表的其余部分没有.

任何人都可以提出一种方法来改善这一点,而不使用不同的算法

lisp common-lisp

1
推荐指数
1
解决办法
368
查看次数

标签 统计

common-lisp ×1

lisp ×1