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
,但我以后会记住它。@Jasoncount
只是一个保存当前匹配数目的变量。这比我在你提供的答案中那样做更有效。谢谢!,我将在另一个版本中尝试这一点。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))])]))