list - common lisp 自定义比较函数

标签 list comparison common-lisp

我需要比较两个列表,当我按顺序排列嵌套列表时,equalp 就可以正常工作,但是我需要一个自定义函数,当我混合排列嵌套列表的顺序时返回 T。类似的东西;

    (setq temp1 '(((BCAT S) (FEATS NIL)) (DIR FS) (MODAL STAR)
      (((BCAT S) (FEATS NIL)) (MODAL STAR) (DIR BS)  ((FEATS NIL) (BCAT NP)))))

    (setq temp2 '((DIR FS) ((BCAT S) (FEATS NIL)) (MODAL STAR)
      (((BCAT S) (FEATS NIL)) (DIR BS) (MODAL STAR) ((BCAT NP) (FEATS NIL)))))

    (equalp-customized temp1 temp2) ; gotta make this return T

我试图找到 equalp 的源代码,我猜这不是一个好主意,然后我可以修改它来支持我的需要。现在我不知道从哪里开始。感谢任何帮助:)

最佳答案

我认为通过递归比较所有元素来天真地这样做可能太慢了,因为它在每个级别上都是二次的。

相反,我建议先将这些树转化为规范形式,然后再使用 equalp。规范形式意味着顺序在所有树中都是一致的。

关于list - common lisp 自定义比较函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55563715/

相关文章:

lisp - 如何将两个相似的函数合并为一个函数

list - Lisp 列表中的不完整输出,# 给出的列表深度超过 4

python - 我如何在 Python 中同时多次 append 一个项目?

Python 3 map 返回 NoneType 对象列表而不是我修改的类型?

sql - 将 SQL 编号转换为时间,以执行日期比较

debugging - 从调试器中进入 sbcl

python - 使用列表理解查找列表中的元素,其中另一个列表中的所有元素都是因子

python - 形成两个字符串列表的笛卡尔积的大多数 Pythonic 方法

javascript - 什么时候在 Javascript 中使用双重相等(松散相等)有意义?

java - 带有 Calendar.after 的 While 语句未启动