对象在列表中至少出现两次?

时间:2017-02-01 01:15:05

标签: racket

我们说我们有一个:(list 1 2 3 5 2 6 7 4)

我想知道2是否至少出现两次。

member?检查它是否完全出现。我想我可以检查member?然后再运行remove,然后再次检查member?。有更有效的方法吗?

2 个答案:

答案 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)的一部分。