Page 1 of 1

How to design a function like Clojure 'iterate'

Posted: Wed Jun 18, 2014 6:30 pm
by ssqq
Following code could make a infinite sequence:

Code: Select all

    (define (f)
    (begin
        (println (inc cnt))
        (push (last f) f -1)
        (if (> (length f) 3) (pop f 1))))
But it is not lazy list:

Code: Select all

(first (f)) --> not 1
How to design a infinite sequence just like iterate and take in Clojure.

(take 10 (iterate inc 5))

Re: How to design a function like Clojure 'iterate'

Posted: Wed Jun 18, 2014 8:18 pm
by rickyboy
How to design a infinite sequence just like iterate and take in Clojure.

(take 10 (iterate inc 5))
Here you go. :)

Code: Select all

> (sequence 5 14)
(5 6 7 8 9 10 11 12 13 14)
^^ This is just a way of saying, "Why do you want to do that?" newLISP is inherently eager, and doing such a thing in the most straight-forward way is the best. Unless, we are not privy to something ...

Re: How to design a function like Clojure 'iterate'

Posted: Thu Jun 19, 2014 10:01 am
by ssqq
richyboy, yes, you are right. I think so.

Re: How to design a function like Clojure 'iterate'

Posted: Thu Jun 19, 2014 3:42 pm
by cormullion

Re: How to design a function like Clojure 'iterate'

Posted: Fri Jun 20, 2014 12:51 am
by TedWalther
I would do it using a context to store internal state, each call to the context/function would update the state and return it. Look at the implementations of gensym on here for ideas.