2016-08-01 77 views
0

member在搜索列表時使用的默認測試是什麼,以及爲什麼它無法找到列表?我正在使用GNU CLISP 2.49。默認:MEMBER中的測試在'((A B))中找不到'(A B)

>(setq X '(A B)) 
>(member X '((A B))) 
NIL 
>(member X (list X)) 
((A B)) 
>(equal (list X) '((A B))) 
T 
>(member X '((A B)) :test #'equal) 
((A B)) 
+3

它默認爲':TEST#'EQL',參見[滿足雙參數測試](http://www.lispworks.com/documentation/HyperSpec/Body/17_ba.htm)。 – jkiiski

回答

4

從哪裏可以找到答案並不明顯。在更高級別瀏覽HyperSpec會非常有幫助。雖然前兩次可能很乏味,但您會從文檔中獲得很多,而且它通常是「可重用的」,許多類似問題的答案都在同一個地方。

在這種情況下,作爲jkiiski mentioned in the comments,回答是 17.2.1 Satisfying a Two-Argument Test,其中指出:

如果既未:測試也不是:測試不提供參數,這是因爲如果一個:測試參數#'eql提供。

注:值得注意的正是這樣做並沒有說這說,測試參數的默認值是#「EQL,並沒有關係」。牛逼說,如果測試值測試不說法是,然後#'EQL被使用。我指出這一點,沒有那麼多測試,但相關關鍵的說法往往是沒有提供,在這種情況下,它是彷彿#'身份使用。)

它還列出了其功能適用於,描述了怎麼測試的參數(或測試不)函數(基於關鍵參數)以及其他一些有用的信息花絮。

當您在本節中時,還應該向父級部分17.2 Rules about Test Functions以及祖父級部門17. Sequences瀏覽「向上」,然後查看這些部分。