Objektorientierte Programmierung stellt das Ende einer Entwicklung dar, die die Verwaltung von „Zustand“, d.H. die Probleme, die die Veränderung von Variablen mit sich bringt, nämlich das sich derselbe Code unterschiedlich verhält, bzw. derselbe Ausdruck unterschiedliche Ergebnisse haben kann, zu kapseln und konzeptionell handhabbar zu machen. Trotz allem widerspricht dies dem funktionalen Programmierparadigma.
Streams stellen einen Ausweg aus dem Dilemma dar: Sie sind z.E. streng funktional, z.A. trotzdem geeignet, Zustand zu verwalten. Die Grundidee dabei ist die einer unendlichen Liste, die alle Zustände bereits enthält, und die, wie ale anderen Listen durch ge“cdr“t werden kann. Der Trick dabei ist, das jeweils nächste Element nicht bereits im Voraus zu generieren, sondern dort nur ein „Versprechen“ (promise) zu hinterlegen, das bei Bedarf zu tun (force). Somit kann die jeweils nächste „promise“ aus den bisherigen Berechnungen abgeleitet werden, das System verwaltet also Zustand, ohne diesen in veränderbaren Variablen vorzuhalten, ist also dabei streng funktional. Hier ist ein wenig Code zum verständnis: 04-streams.scm