有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
不太难,主要的一点是你需要某种缓冲区(在我的例子中称为prev
)来等待可能的乘法:
(define (atomic_count lst)
(let loop ((lst lst) (prev 0))
(if (null? lst)
prev
(let ((elt (car lst)))
(cond
((list? elt) (+ prev (loop (cdr lst) (loop elt 0))))
((number? elt) (loop (cdr lst) (* prev elt)))
(else (+ prev (loop (cdr lst) 1))))))))
测试:
> (atomic_count '(c o 2 (h 2 o) 3 o 2))
14
> (atomic_count '(h 2 o))
3
> (atomic_count '(c o 2 o 2))
5