List 如何计算列表中的所有自然元素(使用mzscheme)

List 如何计算列表中的所有自然元素(使用mzscheme),list,count,scheme,List,Count,Scheme,函数名=mycount 以下是输出示例: (mycount 20) -> error(must standard error) (mycount `()) -> 0 (mycount `(1 2 3)) - > 6 (mycount `((1 2) ((3)) (4 (5)))) -> 15 像这样的?我们不会让你做家庭作业:)(apply+(flatte lst))好吧,我只是想删除我的答案。我总是忘记FP的强大BIF,我的答案太冗长了,我想:)@christophe

函数名=mycount

以下是输出示例:

(mycount 20) -> error(must standard error)
(mycount `()) -> 0
(mycount `(1 2 3)) - > 6
(mycount `((1 2) ((3)) (4 (5)))) -> 15

像这样的?我们不会让你做家庭作业:)

(apply+(flatte lst))
好吧,我只是想删除我的答案。我总是忘记FP的强大BIF,我的答案太冗长了,我想:)@christopherdetroyer我很确定OP不允许使用
flatte
。顺便说一句,它不适用于第一个用例。count和sum不一样。因此,您想在
(1 2 3)
中计算自然数,它是
3
不是
6
。不是惯用的方案(即不实用),您能详细说明一下吗?或者这是计数器的定义?(即,函数中的赋值)您可以变异
计数器
。经典的滚动您自己的方案解决方案是
(让循环((lst-lst)(计数0))(如果(null-lst)计数(循环(cdr-lst)(如果(自然的)(汽车lst))(+1计数)))
,它通过递归更新计数器。
function count-numbers takes a list:
    define a counter
    is it a number?
       ERROR
    is it a list?
        for each element of list:
            cond
                - is it a number? -> increase the counter
                - is it a list?   -> apply (count-numbers) to it and add the result to counter
                - do nothing