我需要你的帮助我输入了一个列表:

(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/

10-10 02:29