在其他列表中查找列表

时间:2015-11-07 19:58:06

标签: 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)) *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函数?

2 个答案:

答案 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

它看起来不太合理。