Common lisp 在其他列表中查找列表

Common lisp 在其他列表中查找列表,common-lisp,Common Lisp,我有一个文件名为dictionary.lisp。这包括一些词语,如 (defparameter *dictionary* '( (a b a) (a b a d i) . . ) 我试着把它们列成一张单子。我尝试了以下方法 [5]> (find '((a b a d i)) *dictionary* :test 'equal ) NIL [6]> (find '((a b a d i)) *dicti

我有一个文件名为
dictionary.lisp
。这包括一些词语,如

(defparameter *dictionary* '(
                    (a b a)
                    (a b a d i)
.
.
)
我试着把它们列成一张单子。我尝试了以下方法

[5]> (find '((a b a d i)) *dictionary* :test 'equal  )
NIL
[6]> (find '((a b a d i)) *dictionary* :test #'equalp  )
NIL
[7]> (member '((a b a d i)) *dictionary* :test 'equal  )
NIL
[8]> (member '((a b a d i)) *dictionary* :test #'equalp  )
NIL
[9]> (find '((a b a d i)) *dictionary* :test #'subsetp  )
NIL

是否有任何lisp函数可以返回非nil?

您需要使用equalequalp作为您的测试,您在四个示例中进行了测试。您还需要搜索列表中实际存在的内容。例如,您所描述的词典包含五个符号的列表作为一个元素,但不包含列表((a b a d i))(这是一个包含单个元素的列表,该元素是五个符号的列表)。这意味着您将执行(查找’(a b a d i).:测试“相等”)

CL-USER> (defparameter *dictionary* '((a b a)
                                      (a b a d i)))
*DICTIONARY*
CL-USER> (find '((a b a d i)) *dictionary* :test 'equal)
NIL
CL-USER> (find '(a b a d i) *dictionary* :test 'equal)
(A B A D I)
CL-USER> (find '(f o o) *dictionary* :test 'equal)
NIL

您需要使用equalequalp作为您的测试,这是您在四个示例中所做的。您还需要搜索列表中实际存在的内容。例如,您所描述的词典包含五个符号的列表作为一个元素,但不包含列表((a b a d i))(这是一个包含单个元素的列表,该元素是五个符号的列表)。这意味着您将执行(查找’(a b a d i).:测试“相等”)

CL-USER> (defparameter *dictionary* '((a b a)
                                      (a b a d i)))
*DICTIONARY*
CL-USER> (find '((a b a d i)) *dictionary* :test 'equal)
NIL
CL-USER> (find '(a b a d i) *dictionary* :test 'equal)
(A B A D I)
CL-USER> (find '(f o o) *dictionary* :test 'equal)
NIL
这看起来没有多大意义


这看起来没有多大意义。

你在寻找错误的东西。不要用相等或相等的测试(你在前四个例子中做得很正确)来
(查找((a b a d i))…)
,做
(查找(a b a d i)…)
。你的建议是什么?我怎样才能得到预期的结果@JoshuaTaylorI认为我在评论中写得很清楚。列表(abadi)是一个包含五个符号的列表,而((abadi))是一个包含五个符号的列表。你的字典包含(abadi),但不包含((abadi))。我在回答中给出了一个恰当的例子。你在寻找错误的东西。不要用相等或相等的测试(你在前四个例子中做得很正确)来
(查找((a b a d i))…)
,做
(查找(a b a d i)…)
。你的建议是什么?我怎样才能得到预期的结果@JoshuaTaylorI认为我在评论中写得很清楚。列表(abadi)是一个包含五个符号的列表,而((abadi))是一个包含五个符号的列表。你的字典包含(abadi),但不包含((abadi))。我在回答中给出了一个恰当的例子。我已经测试了它,当然我的目标是找到这样的((a b a d I))但是谢谢你的支持help@haxfind将该项与列表中的每个元素进行比较。你可以添加
:key'列表
,并得到你想要的结果。我已经测试过了,当然我的目标是找到那样的((a b a d I))但是谢谢你的帮助help@haxfind将该项与列表中的每个元素进行比较。您可以添加
:key'列表
,并获得您要查找的结果。