测试数组是否在lisp中的列表中

时间:2013-10-10 05:31:41

标签: arrays list find common-lisp clisp

我有两件事。第一个a-child是一个列表,其中包含一个数组作为其第一个元素,然后将一些字符串作为其余元素。另一个mapped是一个包含许多数组的列表。通过检查,很容易看到a-child位于mapped,但我找不到能够找到它的功能。

我为下面糟糕的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

我可以用什么函数来查找数组列表中的数组?谢谢。

1 个答案:

答案 0 :(得分:8)

答案

如果您将T传递给他们,那么标记为“返回NIL”的序列函数将返回:test #'equalp

原因

Common Lisp中的默认Two-Argument Testeql

这是ANSI CL标准提供的4(!)通用比较功能之间最合理的选择:

  • eq过于依赖于实现,并且不像人们想要的数字和字符那样工作

  • equalequalp遍历对象,因此对于大型对象需要很长时间,并且可能永远不会终止循环对象。

另见the difference between eq, eql, equal, and equalp in Common Lisp