我需要比较两个列表,当我按顺序排列嵌套列表时,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/