我正在尝试编写一个计算列表中所有项目的 Scheme 函数,但与可用的长度函数不同,它也会计算内部列表,因此 countAll '(a (ab)) 将返回 3 而不是 2。
第一个检查是空列表,第二个应该检查列表的头部当前是否是一个列表本身,然后它应该将该列表的长度添加到总数中并调用下一个递归调用,如果它不是' t,它应该简单地跳到第三部分,这将对总数加一并递归调用该函数。
我遇到了语法错误,我不确定我的方法。我会以正确的方式解决这个问题吗?有没有更好/更简单的方法来做到这一点?
(define countAll
(lambda (list)
(if (null? list)
0
((if (list? (car list)
(+ length (car list)
(countAll (cdr list))))))
(+ 1
(countAll (cdr list))))))
(+ 1
(countAll(cdr list)
)))))