Scheme 函数count应该接受两个参数:一个原子和一个简单列表。函数应该返回在列表中找到原子的次数

Scheme 函数count应该接受两个参数:一个原子和一个简单列表。函数应该返回在列表中找到原子的次数,scheme,racket,Scheme,Racket,我对这个计划还不熟悉,这个问题已经作为家庭作业交给我了。我不知道如何在计划中保持连续计数,这是我需要帮助的部分 问题又来了: 函数count应该接受两个参数:一个原子和一个简单列表。函数应该返回在列表中找到原子的次数 以下是我目前掌握的情况: (define (count atm lst) (cond ((null? lst) 0) ((eq? atm (car lst)) (i don't know how to make a count) (count

我对这个计划还不熟悉,这个问题已经作为家庭作业交给我了。我不知道如何在计划中保持连续计数,这是我需要帮助的部分

问题又来了:

函数count应该接受两个参数:一个原子和一个简单列表。函数应该返回在列表中找到原子的次数

以下是我目前掌握的情况:

(define (count atm lst)
    (cond
        ((null? lst) 0)
        ((eq? atm (car lst)) (i don't know how to make a count) (count atm (cdr lst)))
        (else (count atm (cdr lst)))))
任何帮助都将不胜感激

我仍然不明白,对于函数的每次迭代,在列表中找到原子的次数需要增加多少

这是老师给我的测试用例: (约翰伯爵(约翰·保罗·乔治·林戈))

它应该返回2


我已经盯着这个问题看了很长时间了,请解释一下如何使计数有效。

我的朋友,你非常接近这个问题的答案。要完成这个问题,您需要编写一个测试用例。您需要编写测试用例的原因是,您可以具体地思考代码片段的含义。最具体地说,您需要考虑您正在考虑的特定输入的
(count atm(cdr lst))
计算结果,然后考虑正确答案是什么,以及它们之间的关系。

让我们看看您的代码

(define (count atm lst)
    (cond
        ;; This is obviously correct
        ((null? lst) 0)
        ;; See below
        ((eq? atm (car lst)) (somefunction (count atm (cdr lst))))
        ;; The next one's find as well
        (else (count atm (cdr lst)))))

如果
lst
的尾部(
cdr
)包含
n
出现的
atm
(计数atm(cdr lst))
应返回
n
。然后,知道
n
,如果
(car lst)
eq?
atm
,那么
lst
中有多少?

我不知道如何让它计算在列表中找到的匹配数。我仍然坚持这个问题。花了一段时间,但我明白了,问题是我不知道我可以说(+1(计数atm(cdr lst)))。我们并没有真正学到那么多语法,这更多的是一个去研究和学习它为自己的一种学习。谢谢你的想法。太好了!如果这里有一个教训的话,它可能是这样的:函数式语言的基础是像
(+ee)
这样的表达式适用于任意选择的表达式E和E。如果这已经很明显,我道歉。我仍然不明白。你能给我举个例子说明你的意思吗?@Ethan:读最后一句话。如果
n
cdr
中出现了
atm
,在
car
中出现了一次,那么总共有多少次?
(define (count-atom atm list)
  (cond((null? list) 0)
       ((eq? atm (car list)) (+ 1 (count-atom atm (cdr list))))
       (else (count-atom atm (cdr list)))
       )
 )
(count-atom 'a '(a b a b a r a a a a a a a a a))