2

我有两个项目。第一个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

我可以使用什么函数在数组列表中查找数组?谢谢你。

4

1 回答 1

9

答案

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

原因

Common Lisp 中默认的双参数测试eql.

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

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

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

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

于 2013-10-10T12:47:48.537 回答