我们说我们有一个:(list 1 2 3 5 2 6 7 4)
我想知道2
是否至少出现两次。
member?
检查它是否完全出现。我想我可以检查member?
然后再运行remove
,然后再次检查member?
。有更有效的方法吗?
答案 0 :(得分:0)
您应该使用count
,它会收到lambda
来检查您想要的任何条件以及要检查的列表。它返回列表中符合条件的元素数:
(count (lambda (n) (= n 2)) (list 1 2 3 5 2 6 7 4))
=> 2
然后,验证计数是否满足该数字至少出现两次的要求是一件简单的事情。
答案 1 :(得分:0)
可以使用带递归的成员函数来检查第一个元素是否是所需的数字,并且也是列表其余部分的一部分 - 然后再次使用列表的其余部分循环:
(define (is_duplicated n L)
(let loop ((L L))
(cond
[(empty? L) #f]
[(and (= n (first L))
(member n (rest L))) #t]
[else (loop (rest L))]
)))
(is_duplicated 2 (list 1 2 3 5 2 6 7 4))
请注意,它是“成员”而不是“成员”?这是Racket基本功能(https://docs.racket-lang.org/search/index.html?q=member%3F)的一部分。