2013-10-10 35 views
0

我有兩個項目。第一個是a-child,它包含一個數組作爲其第一個元素,然後將一些字符串作爲其餘元素。另一個是mapped,它是一個包含大量數組的列表。通過檢查,很容易看到a-childmapped中,儘管我找不到可以爲我找到它的功能。測試數組是否在lisp的列表中

我很抱歉下面這個可憐的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 

我可以使用什麼函數在數組列表中尋找數組?謝謝。標

回答

7

答案

你的序列功能「返回NIL」將返回T如果你通過:test #'equalp他們。

Common Lisp中的原因

默認Two-Argument Testeql

這是4由ANSI CL標準規定的通用比較功能之間的最合理的選擇(!):

  • eq過於依賴於實現和作爲一個可能希望在不工作數字和字符

  • equalequalp遍歷對象,因此花費很長時間處理巨大的對象,並且永遠不會終止循環對象。

另請參閱the difference between eq, eql, equal, and equalp in Common Lisp

+0

完美,這是非常有益的。非常感謝! – Free