(defn foo [z-r z-i c-r c-i bailout max-iters]
  (let [G__12819 (double c-r)
        G__12820 (double c-i)
        G__12817 (double -1)
        G__12818 (double 2)
        mi (int max-iters)
        b (double (* bailout bailout))]
    (loop [G__12815 (double z-r)
           G__12816 (double z-i)
           i (int 0)]
      (if (> i mi)
        :iters
        (if (> (+ (* G__12815 G__12815) (* G__12816 G__12816)) b)
          i
          (recur
            (+ (* G__12815 G__12815) (* G__12817 G__12816 G__12816)
G__12819)
            (+ (* G__12818 G__12815 G__12816) G__12820)
            (unchecked-inc i)))))))

#<CompilerException java.lang.RuntimeException:
java.lang.IllegalArgumentException: recur arg for primitive local:
G__12815 must be matching primitive (foo.clj:391)>

The recur arg in question is  (+ (* G__12815 G__12815) (* G__12817
G__12816 G__12816) G__12819) all of whose operands are doubles.

This seems buggy.

(If you're asking why the meaningless names, it's because this is
actually adapted from the output of macroexpand-1. I have a macro to
turn symbolic mathematical expressions into optimized iteration loops.
It's not ready for prime-time yet; besides this problem, it doesn't do
common subexpression elimination, so for instance there's two of (*
G__12815 G__12815) in there.

But: this is the slightly-massaged output of (make-complex-double-
iteration-loop (:= z (+ c (** z 2)))) and close inspection will reveal
that it actually is a loop to iterate that, as a function of complex
numbers, until the modulus exceeds one limit or the iteration count
exceeds another limit. That I have a macro turning (:= z (+ c (** z
2))) into the above code is, I think, a significant accomplishment in
the area of math DSLs. And I did it in under five hours.)

--~--~---------~--~----~------------~-------~--~----~
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