我需要你的帮助我输入了一个列表:
(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/