Clojure 递归地将序列与自身组合,不重复

Clojure 递归地将序列与自身组合,不重复,clojure,Clojure,这很难解释,但很容易表现出来。我不知道为什么我自己还没有弄明白,所以我肯定在clojure中遗漏了一些显而易见的东西 我需要把一个向量和它自身结合成一个向量,我需要把第一个元素和所有剩余的元素结合起来,然后把第二个元素和所有剩余的元素结合起来(第三个和之后) 举个简单的例子: [1 2 3 4 5] 我需要一个函数来获取: [12][13][14][15][23][24][25][34][35] 如果这看起来像是一个大矩阵的一半对,那么你是对的。我只想解矩阵减去中间对角线的一半。这是我唯一需要顺

这很难解释,但很容易表现出来。我不知道为什么我自己还没有弄明白,所以我肯定在clojure中遗漏了一些显而易见的东西

我需要把一个向量和它自身结合成一个向量,我需要把第一个元素和所有剩余的元素结合起来,然后把第二个元素和所有剩余的元素结合起来(第三个和之后)

举个简单的例子: [1 2 3 4 5]

我需要一个函数来获取: [12][13][14][15][23][24][25][34][35]

如果这看起来像是一个大矩阵的一半对,那么你是对的。我只想解矩阵减去中间对角线的一半。这是我唯一需要顺序的部分(所以我只解了一半),其余部分我想使用reducers库来并行化背景中较重的数学


提前谢谢

clojure/math.Combinatics中内置了您想要的:

您正在寻找的基本示例在自述文件中,但为了完整地回答这个问题,我将在这里重复:

(ns example.core
    (:require [clojure.math.combinatorics :as combo]))

(combo/combinations [1 2 3] 2)
;;=> ((1 2) (1 3) (2 3))

clojure/math.Combinatics中内置了您想要的内容:

您正在寻找的基本示例在自述文件中,但为了完整地回答这个问题,我将在这里重复:

(ns example.core
    (:require [clojure.math.combinatorics :as combo]))

(combo/combinations [1 2 3] 2)
;;=> ((1 2) (1 3) (2 3))

我只想用
表示

(for [ i (range 1 6) j (range 6) :when (< i j)] [i j])
; => ([1 2] [1 3] [1 4] [1 5] [2 3] [2 4] [2 5] [3 4] [3 5] [4 5])
(对于[i(范围16)j(范围6):何时( ([1 2] [1 3] [1 4] [1 5] [2 3] [2 4] [2 5] [3 4] [3 5] [4 5])

我只想用
表示

(for [ i (range 1 6) j (range 6) :when (< i j)] [i j])
; => ([1 2] [1 3] [1 4] [1 5] [2 3] [2 4] [2 5] [3 4] [3 5] [4 5])
(对于[i(范围16)j(范围6):何时( ([1 2] [1 3] [1 4] [1 5] [2 3] [2 4] [2 5] [3 4] [3 5] [4 5])

您是否故意错过了结果中的
[4 5]
?我一定是错过了,很抱歉!我认为在示例中使用数字是一个错误,因为我正在处理的序列是数字向量,我认为事情变得混乱了。我本想让它成为一个更抽象的例子,而不是它最终的样子。你是不是故意错过了结果中的
[4 5]
?我一定是错过了,很抱歉!我认为在示例中使用数字是一个错误,因为我正在处理的序列是数字向量,我认为事情变得混乱了。我想让它成为一个更抽象的例子,而不是它最终的样子。谢谢,我以前尝试过这个库,但遇到了一个错误。我认为这是因为我的序列是非数字的,但显然它确实适用于非数字的序列,我只是错过了2作为第二个参数。为什么我们需要一个组合数学库来完成这样一个简单的任务?谢谢,我以前试过这个库,但遇到了一个错误。我认为这是因为我的序列是非数字的,但显然它确实适用于非数字的序列,我只是错过了2作为第二个参数。为什么我们需要一个组合数学库来完成这样一个简单的任务?