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

递归查找首个奇数:如何设置「未找到结果」的返回值?

递归查找列表中第一个奇数的函数优化

原函数及问题

原递归函数用于查找列表中第一个奇数,正常场景下返回正确结果,但遇到列表无奇数或输入非合法列表时会抛出错误:

(defun find-first-odd (x)
  (cond ((oddp (first x)) (first x))
        (t (find-first-odd (rest x)))))

原测试用例

  • 正常场景:
    (find-first-odd '(2 2 10 3 4 6 4)) ; => 3
    
  • 无奇数的列表:
    (find-first-odd '(2 2 10 4 6 4)) ; => 错误:值nil不是整数
    
  • 非合法列表(点列表):
    (find-first-odd '(2 2 10 4 6 4 . 2)) ; => 错误:2不是列表类型
    

优化后的函数

我们需要在递归终止条件中加入空列表判断,同时处理输入非列表的情况,确保函数在无奇数时返回「未找到奇数」的提示:

(defun find-first-odd (x)
  (cond ((not (listp x)) "未找到奇数") ; 处理非列表输入
        ((null x) "未找到奇数")       ; 列表遍历完无奇数
        ((oddp (first x)) (first x))  ; 找到第一个奇数,返回对应值
        (t (find-first-odd (rest x))))) ; 递归遍历剩余元素

优化后测试用例

  • 正常场景:
    (find-first-odd '(2 2 10 3 4 6 4)) ; => 3
    
  • 无奇数的列表:
    (find-first-odd '(2 2 10 4 6 4)) ; => "未找到奇数"
    
  • 非合法列表(点列表):
    (find-first-odd '(2 2 10 4 6 4 . 2)) ; => "未找到奇数"
    

优化说明

  1. 新增(not (listp x))判断:当输入不是合法列表时,直接返回提示信息
  2. 新增(null x)判断:当列表遍历至空(所有元素都不是奇数)时,返回提示信息
  3. 保留原有奇数判断与递归逻辑,确保正常场景下的功能不受影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:30:28