Il modo più semplice sta usando math.combinatorics:
user> (require '[clojure.math.combinatorics :as combo])
nil
user> (combo/permutations #{"word1" "word2" "word3"})
(("word1" "word2" "word3") ("word1" "word3" "word2") ("word2" "word1" "word3") ("word2" "word3" "word1") ("word3" "word1" "word2") ("word3" "word2" "word1"))
Modifica: non ho esaminato l'implementazione di math.combinatorics, ma questa è una versione lenta perché OP ha richiesto un codice da seguire.
(defn permutations [s]
(lazy-seq
(if (seq (rest s))
(apply concat (for [x s]
(map #(cons x %) (permutations (remove #{x} s)))))
[s])))
fonte
2014-09-27 15:20:56
sto ottenendo "iseq da: experiment.core $ eval261 $ fn__262" quando si tenta l'implementazione di permutazione. Chiamandolo come (println (permutazioni # ("w" "d" "m"))). È perché non riesco a stampare una sequenza pigra? – slimbo
'# (" w "" d "" m ")' è la sintassi per una funzione anonima. Vuoi '# {" w "" d "" m "}' @stevemacn –
ughh! Questo è l'errore che continuo a fare - grazie @diego – slimbo