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

Scheme语言求≤n素数列表代码问题:输入n=1时输出异常

解决方案

问题出在没有处理n小于2的边界场景,直接进入了初始包含2的循环逻辑。只需要在函数开头添加边界判断,就能在不破坏原有正常用例逻辑的前提下修复问题:

修改后的完整代码:

(define (primes n)
  ; 先处理n<2的情况,直接返回空列表
  (if (< n 2)
      '()
      (let loop((result `(2))
               (i 3))      
        (cond ((> i n)(reverse result))
              (else (loop
                     (if (divide-any? i result) result (cons i result))
                     (+ i 2)))))))

(define (divide? n1 n2)
  (zero? (modulo n1 n2)))

(define (divide-any? n ls)
  (do ((ls ls (cdr ls)))
      ((or (null? ls)
           (divide? n (car ls)))
       (not (eqv? '() ls)))))

修改说明

  • 新增的(if (< n 2) '() ...)分支直接拦截了n=1、n=0等小于2的输入,返回符合预期的空列表。
  • 当n≥2时,依旧执行原来的循环逻辑,保留对正常测试用例的适配(比如输入3返回(2 3)、输入11返回(2 3 5 7 11))。

另外注意:你提到输入10返回(1,3,5,7)是错误的,1不是素数,修改后的代码输入10会返回正确的素数列表(2 3 5 7)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:40:28