This is what it should look like: >> | 1 | 2 | 3 | >> ---------------- >> 1 | 0 | A | B | >> ---------------- >> 2 | A | 0 | C | >> ---------------- >> 3 | B | C | 0 | >> ---------------- > > Perhaps I'm misapprehending the issue, but why isn't the following > sufficient: > > (defn transpose [matrix] > (vec (apply map vector m))) > > (transpose > [[1 2] > [3 4]]) > > [[1 3] > [2 4]]
So transposing it is not enough. I need the part above the main diagonal to be 'transposed' and put underneath the main diagonal. Maybe I wasn't as clear as I hoped. Let me restate the issue. Currently I'm doing this in 2 stages, basically generating a matrix of refs, then copying the upper half into the lower half. The problem is that I want to do this in 1 function, but the code that I posted earlier can't do this, because the map basically has to refer to the matrix that it's trying to build up. I tried doing it like this: (apply vector (map (fn [i] (apply vector (map (fn [j] (cond (= i j) nil (< i j) (ref somevalue) (> i j) (nth (nth matrix j) i))) n))) n)))))) But as you'd expect all values under the main diagonal get set to nil, because those 2 nth's are referring to positions in the matrix that hasn't been set yet. So currently I got it working by basically repeating the above code. It's ugly and inefficient, and I'm wondering whether it can be done more efficiently. As for performance, I don't actually intend do do any matrix operations on it, just lookups. - Tiemo. -- 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