ohhhhhhhh! all the stuff from listmerge ended up in my-list directly. so then when listmerge was called on these elements it rightly complained! Awesome. Lots of good lessons coming out of this.
I need to learn how to run closure code as a script then. I seem to remember something about this where you do java -cp clojure.jar something.something.REPL yourcode.clj . . . . I'll try to find it. I'm glad I was pretty close. Was gettin' ready to throw in the towel . . . which could have been good 'cause I have a lot of languages in the queue to try out. . . but nope. Gonna keep at it for now. I think I need to build an 800 core machine so I can get an appreciation for it all! But I already appreciate all the help. You guys are dedicated! Thanks again. On Mon, Jan 12, 2009 at 10:23 PM, Timothy Pratley <timothyprat...@gmail.com>wrote: > > > I just want to get this out of my system, but I'm getting some class cast > > exception and no useful line number. > > In situations like these I find that looking at the entire stack trace > provides clues. The REPL by default does not print the entire stack > though I'm sure there is a way to achieve that. However I prefer to > put the code in the file and run it as a script, which by default > prints the entire stack and from that you can see what line it occured > on (search for the first appearance of your filename). Doing so showed > me that the exception was actually thrown in listmerge, because > listmerge was passed in two integers instead of two lists, so I looked > at where you called listmerge, and saw that you called concat > probabbly expecting it to concat lists, but actually it concats the > contents of the lists > > > (var-set my-list (concat @my-list (listmerge [...@l1] [...@l2])))) > @my-list)) > > Here is a naive solution: > (var-set my-list (concat @my-list (list (listmerge @l1 @l2))))) > @my-list) > > So in total your code minimally changed is: > > (defn msort [toSort] > (with-local-vars [my-list (for [x toSort] [x]) l1 0 l2 0] > (while (rest @my-list) > ; (println @my-list) > (var-set l1 (first @my-list)) > (var-set l2 (second @my-list)) > (var-set my-list (drop 2 @my-list)) > (var-set my-list (concat @my-list (list (listmerge @l1 @l2))))) > @my-list)) > > user=> (msort [64 45 2 67 1 7]) > ((1 2 7 45 64 67)) > > NB: the good old print out my-list also helps narrow down what is > happening. > Again, I'm just providing a fix for your code, not suggesting this is > the best approach. > > > Regards, > Tim. > > > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---