有谁知道如何在列表中返回一些特定元素?
示例:给出
(list 'a 'a 'a 'a 'a 'b 'b 'b)
返回'a:
5
'b:
3
答案 0 :(得分:1)
你算他们。您创建一个过程,该过程采用列表和您要搜索的内容,并在保持计数的同时迭代该列表,当您到达结束时,您将返回该值。
简单递归解决方案的框架:
(define (count-element element lst)
(define (helper lst count)
(cond ((empty? lst) count)
((equal? element <first element>) <recurse whith cdr and increasing count>)
(else <recurse with cdr>)))
(helper lst 0))
或者您可以使用foldl
(define (count-element element lst)
(foldl (lambda (e count)
(if <e is the same as element>
<return 1 more than count>
<return count>))
0
lst))
我可能还有10种方法可以做到这一点,但第一种方式是最具教育意义,第二种方式是我最常用的方式。 一些测试:
(define test '(a a a a a b b b))
(count-element 'b '()) ; ==> 0
(count-element 'e test) ; ==> 0
(count-element 'a test) ; ==> 5
(count-element 'b test) ; ==> 3
答案 1 :(得分:1)
我有点设法找到答案,所以这里是函数定义:
(define (number-of s L)
(cond
[(empty? L) 0]
[else (cond [(eq? s (first L)) (+ 1 (number-of s (rest L)))]
[else (number-of s (rest L))])]))