使用nil
在序列中搜索find
总是返回NIL
。
(find nil #(a b nil c)) -> NIL
(find nil #(a b c)) -> NIL
如果序列是列表则相同。
但是,member
按照我的预期运作:
(member nil '(a b nil c)) -> (NIL C)
为什么find
设计为这样运作?
请注意,position
正如我所期望的那样工作:
(position nil #(a b nil c)) -> 2
(position nil #(a b c)) -> NIL
它返回nil,因为查找元素不在序列中的结果是nil。但即使有成员,如果它不在序列中,它将返回nil:
CL-USER> (member nil '(a b c))
NIL
CL-USER>
因此,技术上在序列中搜索nil将返回nil与成员和位置,如果它不在那里当然可能混淆。
CL-USER> (position nil '(a b c))
NIL
CL-USER>
与位置的不同之处在于,如果出现nil,它会返回索引位置,正如您所指出的那样。 Find是这样设计的,因为它不是搜索索引位置,而是基本上搜索匹配该符号的指针,或返回nil。这就是为什么使用位置更有意义,正如你所指出的那样。