2016-08-01 75 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浏览“向上”,然后查看这些部分。