这是一个家庭作业问题
该函数接受一个列表作为参数,该列表可以根据需要包含与子列表一样多的层。例如,'(a (1 b 3)) 或'((a 3 5) (b (3 1) 4))。输出与输入具有相同的列表结构(意味着维护子列表),但每个列表的汽车是列表中所有数字的总和。并且所有其他非数字值都被丢弃。作为示例输出,考虑'((a 3 5) (b (3 1) 4)),输出应为'(16 (8) (8 (4)))。此外,只能使用基本的方案指令/操作,例如 + - * /、car、cdr、cons、append、null?、number?、if/else、cond 等。不能使用辅助方法。
到目前为止,这是我拥有的代码,有时可以部分完成这项工作。但是我很难弄清楚如何从子列表中获取总和,以便在最外列表的汽车的一个位置加起来。
(define partialsums*
(lambda (lis)
(cond
[(null? lis) '(0)]
[(list? (car lis)) (cons (partialsums* (car lis)) (if (not (null? (cdr lis))) (partialsums* (cdr lis)) '()))]
[(number? (car lis)) (cons (+ (car lis) (car (partialsums* (cdr lis)))) '())]
[else (cons (+ 0 (car (partialsums* (cdr lis)))) '())])))
我已经为此花费了几个小时,但无法完全掌握如何正确解决问题,可能是因为这是我使用方案的第一周:(。感谢任何帮助。
另外,我不能使用辅助方法。一切都需要在一个函数中以递归方式完成。letrec也不被允许。