thanks for all the help.  just to answer the last question, 'sorted'
should have taken on the new def before getting returned.  that return
happens after the def is complete.  Will check out refs.  I think
that's what I need to understand.

On Jan 11, 1:27 am, "Eric Lavigne" <lavigne.e...@gmail.com> wrote:
> > 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
-~----------~----~----~----~------~----~------~--~---

Reply via email to