Hi,
Clojure newbie here :) I'm reading "Programming Clojure" by Halloway and
Bedra. In the book there is a lazy-seq example of the Fibonacci sequence:
(defn lazy-seq-fibo
([]
(concat [0 1] (lazy-seq-fibo 0N 1N)))
([a b]
(let [n (+ a b)]
(lazy-seq
(cons n (lazy-seq-fibo b n))))))
I like the flexibility of this implementation but I am a bit sceptical
about its performance:
user=> (time (rem (nth (lazy-seq-fibo) 1000000) 1000))
"Elapsed time: 53552.014713 msecs"
875N
Here's a Python implementation taken from
http://en.literateprograms.org/Fibonacci_numbers_%28Python%29
def fib(n):
a, b = 0, 1
for i in range(n):
a, b = b, a + b
return a
if __name__ == '__main__':
print(fib(1000000) % 1000)
time python fib.py
875
real 0m16.609s
user 0m16.475s
sys 0m0.115s
53 vs 17 seconds is a big gap. Is there a way to achieve better performance
in Clojure? Maybe the fact that I executed the code in the REPL or the Java
version that I'm using matters:
java -version
java version "1.7.0_65"
OpenJDK Runtime Environment (IcedTea 2.5.3) (7u71-2.5.3-0ubuntu1)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.