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

时间:2011-04-26 20:38:06

标签: scheme racket

我是计划的新手并且已经将这个问题作为家庭作业。我不知道如何在计划中保持运行计数,这是我需要帮助的部分。

再次出现问题:

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

这是我到目前为止所拥有的:

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

非常感谢任何帮助!

我仍然不明白在函数的每次迭代中增加列表中原子的次数需要发生什么。

这是我老师给我的测试案例: (伯爵'约翰'(john paul george ringo))

应返回2.

我一直盯着这个问题,请解释如何使计数工作。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

让我们来看看你的代码。

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

如果cdr的尾部(lst)包含n atm次出现,(count atm (cdr lst))应该返回n。然后,知道n,如果(car lst)eq?atmlst中有多少?

答案 2 :(得分:0)

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