On Thu, Dec 29, 2011 at 6:23 PM, Mark Engelberg <mark.engelb...@gmail.com> wrote: > I'd also like to know whether Clooj has any debug or stacktracing > capabilities. Also, can the Clooj repl control the print level of > infinite lazy structures?
(set! *print-length* 20) (set! *print-level* 20) (.printStackTrace *e) Having shortcut buttons or keys for the latter, at least, would be useful though. As for the original code, there is actually a bug in the function -- namely, if an argument is nil (or false) it stops there without an error message and without considering later arguments. Usually for a loop like that I'd use (if more (let [x (first more)] ...)) in lieu of if-let. That distinguishes the case more is nil from (first more) is nil. The correct termination condition is more is nil, in this case. The < comparison will then naturally blow up with an NPE or type error if a nil makes it. An unfortunate feature of the original code, but hard to classify as a bug, is that the < test is never performed, and thus no type error can be generated, if there's only one argument -- which fact made it harder for the OP to identify the nature of their conundrum. Harder enough to end up posting here rather than instantly realizing what had gone wrong, in fact. An explicit additional test at the fn start, such as (if-not (instance? Number x) (throw ...)) would ensure an exception throw if the only argument was nonnumeric. Or you could use a precondition, which is exactly the tool for the job here. -- 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