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

如何在Scheme中编写提取列表偶数位置元素生成新列表的函数

现有代码存在的问题
  • 语法错误:elementHelper的lambda参数声明缺少括号,写成lambda lst而非正确的lambda (lst);函数体第一行直接执行(cdr lst)会尝试将列表作为过程调用,直接触发执行错误。
  • 逻辑错误:使用全局变量newList存储结果不符合Lisp函数式编程的常规实现思路,且cons参数顺序完全颠倒,cons第一个参数是要加入列表的元素,第二个参数是目标列表,现有写法无法生成正确的结果列表。
  • 递归逻辑缺失终止条件:elementHelper没有判断列表为空的边界,会触发无限递归导致栈溢出。
  • 输出逻辑错误:evenElement最终打印的是输入的原始列表,而非筛选后的偶数位置元素列表。
  • 调用写法冗余:测试调用(evenElement '('a 'b 'c 'f 't 'y))多了一层引号,正确的传参写法应为(evenElement '(a b c f t y))。
修正实现

直接通过递归即可完成需求,不需要额外的辅助函数和全局变量,每次递归跳过一个元素,取第二个元素加入结果即可:

(define evenElement
  (lambda (lst)
    (cond
      ((null? lst) '())
      ((null? (cdr lst)) '())
      (else (cons (car (cdr lst)) 
                  (evenElement (cdr (cdr lst))))))))

测试验证

执行(evenElement '(a b c f t y)),输出结果为(b f y),符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:39:01