递归函数未输出计算结果:提取列表子列表首元素失败
递归提取子列表首个元素返回空列表的问题解决
你的问题出在没有将当前提取的元素与递归结果组合起来。Scheme函数会返回最后一个表达式的求值结果,当前代码里(caar graph)只是计算了值但没有保留,每次递归都直接返回(sn-users (cdr graph)),直到触发基准情况返回null,最终整个函数就只返回空列表了。
要解决这个问题,你需要用cons(纯无副作用函数)把当前提取的元素和递归调用的结果拼接成新列表,这样才能逐步构建出目标结果:
(define (sn-users graph) (cond [(empty? graph) null] [else (cons (caar graph) (sn-users (cdr graph)))]))
原理很简单:
- 基准情况:当输入列表为空时,返回空列表作为结果的终止边界
- 递归情况:用
cons把当前子列表的首个元素(caar graph),和剩余列表递归处理的结果拼接在一起,最终就能得到所有子列表首元素组成的完整列表
内容的提问来源于stack exchange,提问作者Jaydn Hunte
相关产品推荐
相关产品推荐

