有功能检查列表中是否存在元素吗?

时间:2018-10-07 01:44:31

标签: racket

在球拍中,我知道member函数会返回元素的首次出现(如果存在),否则会返回#f,但是有一个函数会返回#t#f来确定元素是否存在于列表中?

2 个答案:

答案 0 :(得分:4)

这个问题的答案是member。在球拍中,不是#f的所有内容都是正确的。因此,member可以很好地测试列表中元素的存在:

> (if (member 3 '(1 2 3)) 'present 'absent)
'present
> (if (member 3 '(1 2)) 'present 'absent)
'absent

成功后无需专门制作#t,因为Racket中所有分支的内容仅关心#f和非#f的值。

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

> (and (member 3 '(1 2 3)) #t)
#t

由于很少需要这样做,所以在Racket中,这比编写单独的member?函数更为常见。

答案 1 :(得分:0)

我认为没有标准功能,但是请参见true?库中的without-truthinesspredicates

定义true?非常简单:

(define (true? x)
    (if x #t #f))