我有一个名为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函数?
答案 0 :(得分:3)
您需要使用相等或 equalp 作为您的测试,这是您在四个示例中所做的。您还需要搜索列表中实际存在的内容。例如,您所描述的词典包含五个符号(abadi)的列表作为元素,但不列表((abadi)) (这是一个包含单个元素的列表,该元素是一个包含五个符号的列表)。这意味着您要(找到'(a b a d i)...:test'相等):
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
答案 1 :(得分:1)
CL-USER 25 > (defparameter *dictionary* '((a b a) (a b a d i)))
*DICTIONARY*
CL-USER 26 > (defun my-find (list0 list1)
(and (find (first list0) list1 :test #'equal)
t))
MY-FIND
CL-USER 27 > (my-find '((a b a d i)) *dictionary*)
T
它看起来不太合理。