Hi, Not really mechanisms, but two Idioms will help you with your problem: Either wrap the defn in a let:
(let [U (gen-matrix [1 2 2 -2 -1 -2 2 2 3] 3 3) A (gen-matrix [1 2 2 2 1 2 2 2 3] 3 3) D (gen-matrix [-1 -2 -2 2 1 2 2 2 3] 3 3) S (gen-vector [3 4 5])] (letfn [(prims-from [m] [(mult m U) (mult m A) (mult m D)]) (next-prims [l] (flatten (map prims-from l)))] (defn primitives "Generates pythagorean primitives. Will filter them against pred if given." ([] (iterate next-prims [S])) ([pred] (iterate #(filter pred (next-prims %)) [S]))))) or use a default value for pred: (constantly true) (defn primitives "Generates pythagorean primitives. Will filter them against pred if given." ([] (primitives (constantly true))) ([pred] (let [U (gen-matrix [1 2 2 -2 -1 -2 2 2 3] 3 3) A (gen-matrix [1 2 2 2 1 2 2 2 3] 3 3) D (gen-matrix [-1 -2 -2 2 1 2 2 2 3] 3 3) S (gen-vector [3 4 5])] (letfn [(prims-from [m] [(mult m U) (mult m A) (mult m D)]) (next-prims [l] (flatten (map prims-from l)))])) (iterate #(filter pred (next-prims %)) [S]))) The former will evaluate the values only once when the file is loaded and keep them around until your program dies and do not impose any runtime overhead when you call the function, because all variables are already initialized. The latter one uses a default argument to pred. (constantly true) returns a n-argument function wich returns true on every invokation. Erik -- 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