Racket 球拍清单问题

Racket 球拍清单问题,racket,Racket,有人知道如何返回列表中的一些特定元素吗 示例:给定 (list 'a 'a 'a 'a 'a 'b 'b 'b) 返回'a:5的编号 'b:3你数一数。您创建了一个过程,该过程包含一个列表和您要搜索的内容,并在保持计数的同时迭代该列表,当到达末尾时返回该值 简单递归解决方案的框架: (define (count-element element lst) (define (helper lst count) (cond ((empty? lst) count) (

有人知道如何返回列表中的一些特定元素吗

示例:给定

(list 'a 'a 'a 'a 'a 'b 'b 'b)
返回
'a:
5的编号


'b:
3

你数一数。您创建了一个过程,该过程包含一个列表和您要搜索的内容,并在保持计数的同时迭代该列表,当到达末尾时返回该值

简单递归解决方案的框架:

(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))
我可能还有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

我设法找到了答案,下面是函数定义:

(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))])]))

你尝试了什么?合并长度和过滤器我设法找到了hahaThanks的方法。谢谢你的帮助,我还没有使用
count
,但我以后会记住它。@Jason
count
只是一个保存当前匹配数目的变量。这比我在你提供的答案中那样做更有效。谢谢!,我将在另一个版本中尝试这一点。
cond
的要点是,您有多个术语,而
如果只有一个术语,则需要嵌套。这两个
cond
都可以压缩为一个,留下更可读的代码。我仍然掌握这门语言的基础知识,所以我还不知道它,但我会记住这一点!有些人总是喜欢
cond
而不是
if
,因为在
cond
中,每个子句的条件都是正确的,但是
if
是位置性的,所以迫使我们记住。查阅
(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))])]))