testing数组是否在lisp的列表中
我有两个项目。 第一个是a-child
,它包含一个数组作为其第一个元素,然后是一些string作为其余元素。 另一个mapped
是一个包含大量数组的列表。 通过检查,很容易看出a-child
是在mapped
,虽然我找不到一个函数,将为我find它。
我为下面这个可怜的Lisp风格道歉 – 前几天我开始了,所以我还没有拿起所有的惯例。
(defparameter a-child (list (#2A((1 2 3) (7 4 5) (9 8 6))) "U" "R" "R")) (defparameter mapped (list (#2A((1 2 3) (7 4 5) (9 8 6))) (#2A((1 2 3) (4 5 6) (7 8 9))))) (find (car a-child) mapped) ;;returns NIL (member (car a-child) mapped) ;;returns NIL (position (car a-child) mapped) ;;returns NIL (equalp (car a-child) (car mapped)) ;;returns T
我可以使用什么函数来查找数组列表中的数组? 谢谢。
答案
你的序列函数标记为“返回NIL”将返回T
如果你通过:test #'equalp
他们。
原因
Common Lisp中默认的Two-Argument Test是eql
。
这是ANSI CL标准提供的4(!)通用比较function之间最合理的select:
-
eq
太依赖于实现,不能像数字和字符那样工作 -
equal
和equalp
穿越物体,因此需要很长的时间才能达到巨大的目标,并且可能永远不会终止于圆形目标。
请参阅Common Lisp中eq,eql,equal和equalp之间的区别 。