Unendliche Datenstrukturen

Argumente für Konstruktoren werden auch verzögert ausgewertet, deswegen kann man mit unendlichen Listen, Bäumen usw. rechnen.

nats :: [ Int ]
nats = nats_from 0 where
    nats_from n = n : nats_from (n+1)
Das geht gut, solange man sich immer nur einen endlichen Teil ansieht
take 10 nats  -- OK
take 10 $ map ( \ x -> x * x) nats -- OK
length nats > 20 -- nicht OK
Operationen auf Maschinenzahlen sind strikt (erfordern ausgewertete Argumente)

Johannes Waldmann 2007-01-23