lisp内的列表元素的两个元素组合(没有重复)

Ali*_*i A 1 lisp combinations list common-lisp

从lisp中的任何给定列表,我想获得该列表的元素的两个元素组合,而没有重复的组合(意思是(ab)=(ba),应该删除一个)

例如,如果我有一个(abcd)列表,

我想得到((ab)(ac)(ad)(bc)(bd)(cd))

Rai*_*wig 5

(defun combinations (list)
  (loop for (a1 . r1) on list
        nconc (loop for a2 in r1 collect (list a1 a2))))


CL-USER 172 > (combinations '(a b c d))
((A B) (A C) (A D) (B C) (B D) (C D))
Run Code Online (Sandbox Code Playgroud)