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

Reply via email to