You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Lisp乘法表生成代码输出嵌套列表而非扁平化列表的问题

问题根源

你的代码生成多层嵌套列表的核心问题是列表拼接逻辑错误:list 函数会将传入的每个参数都作为新列表的独立元素,你每次递归时把前一步返回的列表整体作为第一个元素传入list,就会不断嵌套生成多层括号的结构。

修复方案

基础修复(直接符合需求)

将list替换为append,把当前计算结果包装为单元素列表后和递归结果拼接,即可得到扁平化的升序列表:

(define (multiplying-table n value)
  (cond ((= n 0) '())
        (else (append (multiplying-table (- n 1) value) (list (* n value))))))

调用(multiplying-table 10 3)即可直接返回'(3 6 9 12 15 18 21 24 27 30),符合你的预期。

优化版本(尾递归,避免大数值n时栈溢出)

如果需要计算的n值较大,推荐使用尾递归写法降低栈消耗:

(define (multiplying-table n value)
  (define (iter cur acc)
    (if (> cur n)
        (reverse acc)
        (iter (+ cur 1) (cons (* value cur) acc))))
  (iter 1 '()))

内容的提问来源于stack exchange,提问作者Carlos David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:36:04