如何编写Scheme程序实现列表表示的树的叶子节点逆序输出?
问题原因
你代码产生多余嵌套括号的核心问题出在子列表处理分支:当(car givenList)是列表时,你使用(cons (leaves (car givenList)) '())将递归返回的扁平叶子列表额外包裹了一层列表结构,append操作会直接保留这层嵌套,最终输出就会带有多余括号。
修改后的代码
(define (leaves givenList) (if (null? givenList) givenList (if (list? (car givenList)) ;; 直接append两个递归返回的扁平列表,无需额外包裹 (append (leaves (cdr givenList)) (leaves (car givenList))) (append (leaves (cdr givenList)) (list (car givenList))))))
验证结果
调用测试用例(leaves '(((1 2) (3 4)) ((1 2) (3 4)))),输出结果为预期的'(4 3 2 1 4 3 2 1)。
内容的提问来源于stack exchange,提问作者Jackscalibur
相关产品推荐
相关产品推荐

