lazy-evaluation

Lexical closures in Python

While I was investigating a problem I had with lexical closures in Javascript code, I came along this problem in Python: flist = [] for i in xrange(3): def func(x): return x * i flist.append(func) for f in flist: print f(2) Note that this example mindfully avoids lambda. It prints "4 4 4", which is surprising. I'd expect...

Why is lazy evaluation useful?

I have long been wondering why lazy evaluation is useful. I have yet to have anyone explain to me in a way that makes sense; mostly it ends up boiling down to "trust me". Note: I do not mean memoization. ...

C# Lamda-Expressions and Lazy Evaluation

One advantage of lamda expressions is that you only have to evaluate a function, when you need its result. In the following (simple) example, the text function is only evaluated when a writer is present: public static void PrintLine(Func<string> text, TextWriter writer) { if (writer != null) { writer.WriteLine(text()); ...

Lazy evaluation in C++

C++ does not have native support for lazy evaluation (as Haskell does). I'm wondering if it is possible to implement lazy evaluation in C++ in a reasonable manner. If yes, how would you do it? EDIT: I like Konrad Rudolph's answer. I'm wondering if it's possible to implement it in a more generic fashion, for example by using a parametr...

is it possible to print all reductions in Haskell - using WinHugs?

I have written the following function.. and executed using WinHugs teneven = [x | x <- [1..10], even x] My output : Main> teneven [2,4,6,8,10] :: [Integer] (63 reductions, 102 cells) is there anyway to print all the reductions.. so I can learn the core evaluation happening inside WinHugs? ...

Implementing a "LazyProperty" class - is this a good idea ?

I often find myself writing a property that is evaluated lazily. Something like: if (backingField == null) backingField = SomeOperation(); return backingField; It is not much code, but it does get repeated a lot if you have a lot of properties. I am thinking about defining a class called LazyProperty: public class LazyProperty<T>...

Ways for lazy "run once" initialization in Java with override from unit tests

I'm looking for a piece of code which behaves a bit like a singleton but isn't (because singleton's are bad :) What I'm looking for must meet these goals: Thread safe Simple (Understand & use, i.e. few lines of code. Library calls are OK) Fast Not a singleton; for tests, it must be possible to overwrite the value (and reset it after th...

How to reduce memory usage in a Haskell app?

I am new to functional programming, and now learn Haskell. As an exercise I decided to implement the explicit Euler method for 1D linear diffusion equation. While the code below works correctly, I am not happy about its performance. In fact, I am concerned with memory consumption. I believe that it is related to lazy evaluation, but cann...

Where are the clever uses of strict evaluation?

It seems like there are plenty of examples of clever things being done in a lazily-evaluated language that can't be done in an environment with strict evaluation. For example infinite lists in Haskell or replacing every element in a tree with the tree's minimum value in one pass. Are there any examples of clever things being done in a ...

How can I have PHP avoid lazy evaluation?

I have an interesting question about the way PHP evaluates boolean expressions. When you have, for example, $expression = $expression1 and $expression2; or if ($expression1 and $expression2) PHP first checks if $expression1 evaluates to true. If this is not the case, then $expression2 is simply skipped to avoid unnecessary calcul...

Haskell script running out of space

I'm using project Euler to teach myself Haskell, and I'm having some trouble reasoning about how my code is being executed by haskell. The second problem has me computing the sum of all even Fibonacci numbers up to 4 million. My script looks like this: fibs :: [Integer] fibs = 1 : 2 : [ a+b | (a,b) <- zip fibs (tail fibs)] evens :: I...

Dealing with lazy computation in C++ classes

Let's say I have a class: class NumberCollection { public: typedef std::set<int> SetType; typedef SetType::iterator iterator; void insert(int n); iterator begin(); iterator end(); size_t size() const; iterator difficultBegin(); iterator difficultEnd(); size_t difficultSize() const; private: ...

Haskell style/efficiency

So I was working on a way to lazily generate primes, and I came up with these three definitions, which all work in an equivalent way - just checking whether each new integer has a factor among all the preceding primes: primes1 :: [Integer] primes1 = mkPrimes id [2..] where mkPrimes f (x:xs) = if f (const True) x ...

Could someone explain these Haskell functions to me?

I've dabbled with Haskell in the past, and recently got back into it seriously, and I'm reading real world haskell. Some of the examples they've shone, I've yet to understand. Such at this one: myLength [] = 0 myLength (x:xs) = 1 + myLength (xs) I don't see how this works, what is 1 really being added too? How is the recursion ret...

String.format with lazy evaluation

I need something similar to String.format(...) method, but with lazy evaluation. This lazyFormat method should return some object whose toString() method would then evaluate the format pattern. I suspect that somebody has already done this. Is this available in any libararies? I want to replace this (logger is log4j instance): if(lo...

Returning pure Django form errors in JSON

Hi I have a Django form which I'm validating in a normal Django view. I'm trying to figure out how to extract the pure errors (without the HTML formatting). Below is the code I'm using at the moment. return json_response({ 'success' : False, 'errors' : form.errors }) With this, I get the infamous proxy object e...

How do I make a Lazy List in an Eager Language?

I wanted to make a lazy list in Scheme. This is what I have so far. ;; Constructor for Pairs (define (cons-stream a b) (cons a (λ() b))) ;; Selectors (define (car-stream a-stream) (car a-stream)) (define (cdr-stream a-stream) ((cdr a-stream))) ;; Lazy List using the pairs (define (lazy-list from) (cons-stream from (lazy-list ...

What does the exclamation mark mean in a Haskell declaration?

I came across the following definition as I try to learn Haskell using a real project to drive it. I don't understand what the exclamation mark in front of each argument means and my books didn't seem to mention it. data MidiMessage = MidiMessage !Int !MidiMessage Thanks for any responses ...

Is there a Haskell compiler or preprocessor that uses strict evaluation?

I'm looking for a Haskell compiler that uses strict evaluation by default instead of lazy evaluation. I would just use OCaml, but Haskell's syntax is so much better than OCaml's (and Haskell is pure, and has cool features such as type classes). I'd really rather not constantly put !s and $!s all over my program. A compiler with a switch...

padding binary-block lazy sequences

I have Clojure function that takes a sequence of numbers chops it into the appropriate number of bits and returns a lazy sequence of the chunks (lowest order bits first). It pads the high order bits of the last block to fill out the block size and I need advice on the "best way(tm)" to record the amount of padding while keeping it lazy a...