0

これを説明するのは難しいですが、簡単に示すことができます。なぜ自分でそれを理解していないのかわからないので、明らかなclojureの何かが欠けているに違いありません。

ベクトルをそれ自体と組み合わせてベクトルにする必要があります。最初の要素を残りのすべての要素と組み合わせ、次に2番目の要素を残りのすべての要素(3番目以降)と組み合わせる必要があります。

簡単な例として:[1 2 3 4 5]

取得する関数が必要です:[[1 2] [1 3] [1 4] [1 5] [2 3] [2 4] [2 5] [3 4] [3 5]]

これが大きな行列のペアの半分を取得するように見える場合、あなたは正しいです。マトリックスの半分から中央の対角線を引いたものだけを解きたいです。これは私がシーケンシャルにする必要がある唯一の部分です(したがって、半分しか解決しません)。残りは、バックグラウンドでより重い数学を並列化するためにレデューサーライブラリを使用したいと思います。

前もって感謝します!

4

3 に答える 3

3

私はただ使用しますfor

(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])
于 2013-02-27T22:48:15.273 に答える
3

必要なものはclojure/math.combinatoricsに組み込まれています: https ://github.com/clojure/math.combinatorics

あなたが探している基本的な例はreadmeにありますが、この答えを完全にするために、ここで繰り返します。

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

(combo/combinations [1 2 3] 2)
;;=> ((1 2) (1 3) (2 3))
于 2013-02-27T22:06:54.680 に答える
0
(def v [1 2 3 4 5])

(for [i (range (count v)) 
      :let [vv (drop i v)] 
      r (rest vv)] 
  [(first vv) r])

=> ([1 2] [1 3] [1 4] [1 5] [2 3] [2 4] [2 5] [3 4] [3 5] [4 5])
于 2013-02-28T02:47:46.007 に答える