List 如何计算列表中的所有自然元素(使用mzscheme)
函数名=mycount 以下是输出示例: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 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