4

私はclojureが初めてで、サブセットの順列を生成する関数を探しています:

=> (find-subsets 1 #{1 2 3 4})
(#{1} #{2} #{3} #{4})

=> (find-subsets 2 #{1 2 3 4})
(#{1 2} #{1 3} #{1 4} #{2 3} #{2 4} #{3 4})

=> (find-subsets 3 #{1 2 3 4})
(#{1 2 3} #{1 3 4} #{2 3 4})

そのようなものは存在しますか?そうでない場合、関数をコーディングするためのきれいで慣用的な方法はありますか?

4

1 に答える 1

10

組み合わせ論を見てください。それはあなたが必要とすることをします:

; all the unique ways of taking n different elements from items
(clojure.math.combinatorics/combinations [1 2 3] 2)
;;=> ((1 2) (1 3) (2 3))

ベクトルの代わりにセットを使用しているために問題が発生する場合は、 を呼び出す前に vec でベクトルに変換してcombinationsください。

于 2013-02-28T22:28:44.390 に答える