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太依赖于实现,不能像数字和字符那样工作

  • equalequalp穿越物体,因此需要很长的时间才能达到巨大的目标,并且可能永远不会终止于圆形目标。

请参阅Common Lisp中eq,eql,equal和equalp之间的区别 。