有没有一个函数可以检查列表中是否存在某个元素?

Par*_*dox 1 racket

在球拍中,我知道有一个member函数会返回某个元素的第一次出现(如果存在)或#f其他情况,但是是否有一个函数仅返回#t#f判断该元素是否存在于列表中?

Ale*_*ing 5

这个问题的答案是member。在 Racket 中,一切不真实的#f都是真实的。因此,member可以很好地测试列表中元素的存在:

\n\n
> (if (member 3 '(1 2 3)) 'present 'absent)\n'present\n> (if (member 3 '(1 2)) 'present 'absent)\n'absent\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\x99s 不需要#t在成功时专门生成,因为 Racket 中分支的所有内容只关心#f#f值。

\n\n

在某些罕见的情况下,您确实需要布尔值,例如,如果您要将结果存储在某些数据结构中,并且不想保留对列表的不必要的引用。在 Racket 中执行此操作的常用习惯用法是(and v #t),其中v是某个值,因为这相当于编写(if v #t #f)。因此,您可以将您的呼叫包围起来member

\n\n
> (and (member 3 '(1 2 3)) #t)\n#t\n
Run Code Online (Sandbox Code Playgroud)\n\n

由于很少需要这样做,因此在 Racket 中这比编写单独的member?函数更惯用。

\n