> > > I have no idea how to iteratively mess with it since everything is > persistent. Ok, like, say it's a list of lists and I am going to be > merging the lists, like Tarjan's mergesort from some book from > college. >
Sorting is done much more easily with recursion than with iteration. However, it looks like you are focused on learning language features rather than programming strategy, so I will just answer your questions. I have not actually done any iterative programming in Clojure, as I prefer the functional approach, so my answers are based on my limited understanding of the Clojure documentation. so I have myList with contents [[11] [2] [4] [1] [99]] > > here's how I would do it in python: > > def msort(myList): > myList = [[x] for x in someList] > while len(myList) > 1: > l1 = myList.pop(0) > l2 = myList.pop(0) > listmerge = some_merge_function(l1, l2) > myList.append(listmerge) # important that newly merged go > to back of queue to get proper runtime > return myList[0] > > here's what I'm trying to do for clojure, and it's a mess: > > (defn msort [toSort] > (def sorted (let Be careful with def. I think that it creates a global, and it looks like you want something with a scope limited to this function. http://clojure.org/Vars > [myList (for [x toSort] [x])] <----- so far so good (not a > real comment. I don't know how, yet) Use a semicolon to create a comment: some code ; a comment > [ > (while (> (count myList) 1) <------- infinite loop the way > written? I don't know how to overwrite myList > (let [l1 (nth myList 0)][]) The line above does nothing. When you write "(let [x 1] expr1) expr2" the new value of x has a narrow scope so that it only affects expr1. You are wanting to create a local variable that you can change. Refs can do that: (let [x (ref 3)] (dosync (while (> @x 0) (ref-set x (- @x 1))) @x)) http://clojure.org/Refs > (let [l2 (nth myList 1)][]) > (let [listmerge (some_merge_func l1 l2)][]) > (let [myList (concat (drop 2 myList) listmerge)][myList]) <--- > probably a different local variable > ) > ])) > sorted) After all that work you just return the original list? I must have missed the part where you tried to change sorted. Any such attempt would fail, though, because Clojure collections are immutable. Maybe sorted should be a ref to a list instead of just a list. Here is a discussion of sorting implementations in Clojure. I hope that you find it useful. http://www.fatvat.co.uk/2008/12/bubbling-clojure.html -- Education is what survives when what has been learned has been forgotten. - B. F. Skinner --~--~---------~--~----~------------~-------~--~----~ 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 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 -~----------~----~----~----~------~----~------~--~---