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

如何编写LISP函数生成列表的所有可能无序两两组合?

LISP列表两两无序组合实现方案

核心实现思路

无序两两组合的核心逻辑可以通过递归实现,不需要额外依赖:

  • 边界条件:当输入列表长度小于2时,不存在有效两两组合,直接返回空列表
  • 递归步骤:
    1. 取当前列表的首元素,将其与列表剩余的所有元素逐一配对
    2. 对去掉首元素后的子列表递归执行当前组合逻辑,得到剩余元素的所有两两组合
    3. 拼接上述两部分结果,即为完整的无序两两组合集合

代码实现(Common Lisp)

(defun pairwise-combinations (lst)
  ;; 边界判断:剩余元素不足2个时返回空
  (if (null (cdr lst))
      nil
      (append
        ;; 首元素和剩余所有元素配对
        (mapcar (lambda (x) (list (car lst) x))
                (cdr lst))
        ;; 递归处理剩余子列表
        (pairwise-combinations (cdr lst)))))

效果验证

执行测试代码:
(pairwise-combinations '(a b c d))
返回结果完全符合预期:
((A B) (A C) (A D) (B C) (B D) (C D))

扩展提示

如果后续需要支持任意长度的组合(比如从列表中取k个元素的所有无序组合),可以在上述逻辑基础上新增参数控制选取长度,调整递归终止条件和配对逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:54:03