默认值:在会员中测试未在'((A B)中找到(A B)

时间:2016-08-01 16:36:02

标签: common-lisp

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))

1 个答案:

答案 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,然后浏览一下。