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))
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))
從哪裏可以找到答案並不明顯。在更高級別瀏覽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瀏覽「向上」,然後查看這些部分。
它默認爲':TEST#'EQL',參見[滿足雙參數測試](http://www.lispworks.com/documentation/HyperSpec/Body/17_ba.htm)。 – jkiiski