member在搜索列表时使用的默认测试是什么,为什么无法找到列表?我正在使用GNU CLISP 2.49。
>(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))
答案 0 :(得分:4)
在哪里找到答案并不是很明显。在更高级别浏览HyperSpec非常有用。虽然前几次可能很乏味,但是你会从文档中获得很多东西,并且它通常可以重复使用#34-许多类似问题的答案都在一样的地方。
在这种情况下,作为jkiiski mentioned in the comments,答案是 17.2.1 Satisfying a Two-Argument Test,其中声明:
如果既没有提供:test也没有提供:test-not参数,那就好像提供了一个#' eql的test参数。
(注意:它值得注意的是它做了什么,并没有说。这个没有说默认值测试参数是#' eql ,并且如果测试或测试不是参数是 nil ,然后使用#' eql 。我指出的不是测试,而是相关的密钥参数通常可以 nil 或未提供,在这种情况下就好像#' identity 被使用。)
它还列出了适用的函数,描述了如何计算测试(或测试非)函数的参数(基于键参数),以及其他一些有用的信息花絮。
虽然你在本节中,但它也值得浏览" up"到父母部分17.2 Rules about Test Functions和祖父母部分17. Sequences,然后浏览一下。