gpt4 book ai didi

recursion - LISP 中的映射函数

转载 作者:太空宇宙 更新时间:2023-11-03 19:02:15 25 4
gpt4 key购买 nike

我有件事需要你的帮助。我有一个输入列表:

(1 ((2 3) (4 ((5) (6)))) ((7 8) (9 10)) 11)

我想在输出中接收以下内容:

((1 2 3 7 8 11)

(1 2 3 9 10 11)

(1 4 5 7 8 11)

(1 4 5 9 10 11)

(1 4 6 7 8 11)

(1 4 6 9 10 11))

mapcar、mapcan、maplist...等功能都帮不上忙。我认为有必要使用递归函数,但不知道如何使用。

最佳答案

你描述的功能好像是DNF计算。这是我的解决方案:

(defun dnf (f)
(when f
(if (consp f)
(let ((f-car-dnf (dnf (car f)))
(f-cdr-dnf (dnf (cdr f))))
(if (or (null f-cdr-dnf) (every #'consp f))
(append f-car-dnf f-cdr-dnf)
(mapcan
(lambda (f-cdr-cj)
(mapcar (lambda (f-car-cj) (append f-car-cj f-cdr-cj))
f-car-dnf))
f-cdr-dnf)))
`((,f)))))

是实习任务吗?

关于recursion - LISP 中的映射函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28958278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com