;-) It didnt exactly do what I did, it just produced the numers I needed in between, I had to add the filtering.
Then I compared the time, and yours is almost 40% quicker. Cool! (First time I saw type hints in Clojure. :) Now the main difference was the call to step. You did it tail call optimised via recur, I didn't. Not knowing how this is implemented, I used it for one more timing - no statistics, just one run - no difference at all. http://paste.lisp.org/+21BR/2 Thank you!, and I (probably) quit the web for today. Bye and read you. alux On 16 Feb., 17:43, Sean Devlin <francoisdev...@gmail.com> wrote: > Interesting... could you add a few test cases? I want to make sure > my implementation does what you expect. > > Thanks, > Sean > > On Feb 16, 11:18 am, alux <alu...@googlemail.com> wrote: > > > I'm curious, but as you told me, I pasted my solution (with a lazy > > stream), as annotation of my former program. > > >http://paste.lisp.org/+21BR/1 > > > So, now I'll have a look at yours. > > > Thanks, and read you soooon. > > > alux > > > On 16 Feb., 14:32, Sean Devlin <francoisdev...@gmail.com> wrote: > > > > Alux, > > > This is good progress, keep up the good work. Here's my > > > implementation w/Jarkko's suggestions built in. Take a look at this > > > AFTER you complete your next iteration :) > > > >http://gist.github.com/305521 > > > > I've changed the following > > > > * Imported java.math.BigInteger > > > * Used the instance? predicate to test if an object is a BigInteger in > > > your big-int fn. > > > * I added type hints to special-log. This lets Clojure use the > > > specific class methods for the object instead of reflection. The > > > result is the code is much faster. > > > * removed the letfn and placed step in the normal let block. There's > > > no mutual recursion, so let will do the job. > > > * Wrote the producing fn in terms of iterate, so the result is now a > > > lazy list. > > > > Sean > > > > On Feb 16, 6:38 am, Jarkko Oranen <chous...@gmail.com> wrote: > > > > > On Feb 16, 12:26 pm, alux <alu...@googlemail.com> wrote: > > > > > > Hello, > > > > > > the current state of Conway's Prime Machine is > > > > > athttp://paste.lisp.org/+21BR > > > > > Instead of using a quoted list, a vector is more idiomatic in Clojure. > > > > > > I'l go on learning. The next state should be seperation of print and > > > > > produce. Currently (conway-pm) doesnt return stuff. I dont know if > > > > > Clojure can produce infinite lists, like Haskell, and print the items > > > > > as they come. > > > > > It can. They're just called infinite sequences. For example, (iterate > > > > inc 0) produces an infinite sequence of integers from 0 onwards. You > > > > can also construct your own infinite sequences using the lazy-seq > > > > macro in a pattern like the following: > > > > > (defn count-down [x] > > > > (lazy-seq (cons x (count-down (dec x))))) ; lazy-seq doesn't > > > > actually evaluate the cons until it's requested > > > > > However, often you should start by looking at the core library and see > > > > if there already exists a function to produce a list that you need, > > > > and only afterwards construct things from scratch. For example, > > > > "repeatedly" and "iterate" are common seq-producers, and "map" and > > > > "filter" are used to transform them. They're all lazy, so infinite > > > > seqs are not problematic. > > > > > There is one thing you need to look out for though: Never define a > > > > global reference to an infinite seq. The items in a sequence are > > > > cached, so if you define a global reference to the head, no part of > > > > the seq will ever be garbage collected and its memory usage will be > > > > unbounded. -- 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