On Oct 19, 5:52 pm, Peregrine <stiebs...@gmail.com> wrote:
> Hey I am new to Clojure and I am doing some Project Euler problems to
> help me get started with the language. I've run into a issue I cannot
> seem to get past. I have this code:
>
> (defn findFib
>         "Find the sum of all the even-valued terms in the sequence which do
> not exceed four million."
>         [e n p]
>         (if (< n 1000000)
>                 (if (= (rem n 2) 0)
>                         (findFib (+ e n) (+ n p) (n))
>                         (findFib (e) (+ n p) (n)))
>         (str "Value is " e)))
>
> And I keep getting this error
>
> 1:9 problem2=> (findFib 0 1 2)
> 1:10 problem2=> java.lang.ClassCastException: java.lang.Integer cannot
> be cast to clojure.lang.IFn (repl-1:9)

You're using your integers as functions, leading to this rather
cryptic error.
These two lines are the problem:
>                         (findFib (+ e n) (+ n p) (n))
>                         (findFib (e) (+ n p) (n)))
(e) and (n) are function calls, which will fail since e and n are
plain integers. You simply need to remove the parentheses and it'll
work. :)

Furthermore, your naming is nonidiomatic... Lisp code should use
lowercase and dashes instead of camelcase. "find-fib" is better. The
function also happens to be tail-recursive so you can replace the
findFib calls with the recur special form to avoid growing the stack
needlessly.

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