【问题标题】:combination of pair subsets from a list in lisplisp 列表中对子集的组合
【发布时间】:2015-03-09 12:27:55
【问题描述】:

如何从 conman lisp 的列表中创建所有可能的对子集。例如列表 A 包含四个元素

list A= ("A" "B" "C" "D")  

the expected output is as follows:

(("A","B"),("A","C"), ("A","D"),("B","C"),("B","D"), ("C","D"))

有人可以帮我生成这些子集吗? 非常感谢

【问题讨论】:

  • 您尝试了哪些方法,哪些问题阻止您解决此问题?

标签: list lisp subset


【解决方案1】:

阅读mapcar et al

(defparameter a (list 1 2 3 4))
(mapcon (lambda (tail)
          (mapcar (lambda (x)
                    (cons (car tail) x))
                  (cdr tail)))
        a)
==> ((1 . 2) (1 . 3) (1 . 4) (2 . 3) (2 . 4) (3 . 4))

【讨论】:

  • 非常感谢 完美!
  • 只需要澄清子列表,例如上面输出的 (1 . 2),我无法从子列表中读取元素。我试过如下:
  • 只需要澄清子列表,例如上述输出中的 (1 . 2),我无法从子列表中读取元素。我已经尝试如下:我在 outputlist 中设置了上述结果并遍历 (dolist (x outputlist) (print x) (nth 0 x)) 但出现错误。我们是否有可能在没有点的情况下获得子列表结果,以便我们可以读取子列表的元素。 Print x 打印子列表元素,但我们无法读取子列表的元素。实际上我想迭代子列表的值。非常感谢您的帮助。
  • 要获取列表 (1 2) 而不是 cons 单元格 (1 . 2),请使用 list 而不是 cons。但是,您应该坚持使用cons 并使用carcdr 而不是nth
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
相关资源
最近更新 更多