Your permutations is being called again for similar inputs..
Try using this and see that similar inputs like (2 3) are coming again for  
(permutations [1 2 3 4])

(defn permutations [s]
  (prn s)          ;; This will print input
  (lazy-seq
   (if (seq (rest s))
     (apply concat (for [x s]
                     (map #(cons x %) (permutations (remove #{x} s)))))
     [s])))


Using the following solves that problem : It seems to be also not taking 
much memory :

(defn insert-at-every-pos [x v]
  (loop [s x
         e []
         r []]
    (if (empty? s)
      (conj r (into [v] x))
      (recur (pop s) (conj e (peek s)) (conj r (into (conj s v) e))))))

(defn permutations [s]
  (prn s)
  (lazy-seq
   (if (seq (rest s))
     (mapcat (fn [p] (insert-at-every-pos p (peek s))) (permutations (pop 
s)))
     [s])))

(filter nil? (permutations (vec (range 11))))

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to