在球拍中,我知道member
函数会返回元素的首次出现(如果存在),否则会返回#f
,但是有一个函数会返回#t
或#f
来确定元素是否存在于列表中?
答案 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)