[Haskell-cafe] Lazy evaluation from "Why Functional programming matters"

Brent Yorgey byorgey at seas.upenn.edu
Tue Oct 5 10:23:07 EDT 2010


On Tue, Oct 05, 2010 at 07:37:32PM +0530, C K Kashyap wrote:
> > Hi,
> > Let us try to rewrite the code in a more java-esque syntax:
> > It translates to something like the below generic method. Correct?
> > static <T> T function(IBoundsCheck<T> within, Delta<T> eps,  Iterator<T>
> > iterator, T initValue){
> >       T currVal = initVal;
> >     while(iterator.hasNext()){
> >         T nextVal = iterator.next();
> >          if(within.verify(delta, eps, currVal, nextVal))
> >                           return currVal;
> >          currVal = nextVal
> >    }
> > }
> >
> > I have not tested it but I think this is a fair translation of the code.
> >  (For instance, by using an appropriate implementation of IBoundsCheck, I
> > will be able to implement the 'relativeSqrt' functionality of the example).
> > But this IS still a lazy evaluation. By passing an iterator instead of a
> > list as the third argument of the static method, I achieved 'laziness'.
> > In the example, the laziness is in the way we are iterating over the
> > sequence of values [a0,f(a0), f(f(a0)),...] and so on and not on when the
> > runtime evaluates appropriate values.
> > Just that having to write,
> > (repeat (next N) a0)
> > is (take 1000 (repeat 1)) times more intuitive and convenient than having to
> > implement the Iterator for T or implementing a true-while loop.
> >
> I see ... I think I understand now.
> hmmm ... I am little disappointed though - does that mean that "all
> the laziness" cool stuffs can actually be done using
> iterators(generators)?
> As in, but for the inconvenient syntax, you can do it all in - say
> java?

You can do anything in any Turing-complete language, but for the
inconvenient syntax.  So what?

-Brent


More information about the Haskell-Cafe mailing list