itertoolsをclojureで(permutations)
pythonのitertools.permutationsをclojureで書いてみました。
clojure.contrib.combinatorics/permutationsが既にありますが、それはそれとして。
(ns itertools (:use clojure.contrib.seq-utils [clojure.contrib.combinatorics :only (cartesian-product)])) (defn cartesian-product-repeat [s r] (apply cartesian-product (repeat r s))) (defn permutations [s & [r]] (let [r (or r (count s))] (for [indices (cartesian-product-repeat (range (count s)) r) :when (== (count (set indices)) r)] (vec (for [i indices] (nth s i))))))