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

如何在Lisp中交错合并两个列表并在长度不匹配时提示错误

解决Lisp intercalate函数的长度匹配问题

你的现有代码未在合并前检查列表长度,且递归逻辑会在其中一个列表为空时直接追加剩余元素,导致长度不匹配时仍继续合并。要满足需求,需先检查两个列表长度是否相等,不相等则返回指定错误信息,再执行严格的交错合并。

修改后的代码

(defun intercalate (list1 list2)
  ;; 先检查列表长度是否匹配
  (unless (= (length list1) (length list2))
    (return-from intercalate "List lengths must match"))
  ;; 长度匹配时执行交错合并
  (cond 
    ((and (null list1) (null list2)) nil)
    (t (cons (first list1) 
             (cons (first list2) 
                   (intercalate (rest list1) (rest list2)))))))

修改说明

  • 前置长度检查:通过(= (length list1) (length list2))判断两个列表长度是否一致,不一致时用return-from直接返回错误字符串,终止函数执行,从根源避免长度不匹配的合并操作。
  • 调整递归逻辑:每次同时取出两个列表的首个元素依次加入结果,再递归处理两个列表的剩余部分,严格保证元素的交错顺序,且只有在长度匹配时才能完成完整合并。

测试验证

  • 调用(print (intercalate '(1 3 5) '(2))),返回"List lengths must match",符合需求。
  • 调用(print (intercalate '(1 3) '(2 4))),返回(1 2 3 4),正确完成交错合并。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:40:36