Some languages (Haskell, Clojure, Scheme, etc.) have lazy evaluation. One of the “selling points” of lazy evaluation is infinite data structures. What is so great about that? What are some examples of cases where being able to deal with infinite data structures is clearly advantageous?
Some languages (Haskell, Clojure, Scheme, etc.) have lazy evaluation. One of the selling points
Share
Here are two examples, one big and one small:
Why Functional Programming Matters by John Hughes has a good example, of a chess game. The move tree for a chess game is not actually infinite, but its big enough that it might as well be infinite (call it “near-infinite”). In a strict language you can’t actually treat it as a tree, because there isn’t enough room to store the whole tree. But in a lazy language you just define the tree and then define a “nextMove” function to traverse it as far as necessary. The lazy evaluation mechanism takes care of the details.
The small example is simply associating an index number with every item in a list, so that [“foo”, “bar”, “baz”] becomes [(1,”foo”), (2,”bar”), (3,”baz”)]. In a strict language you need a loop that keeps track of the last index and checks to see if you are at the end. In Haskell you just say:
The first argument to zip is an infinite list. You don’t need to work out how long it needs to be ahead of time.