Datenströme und rekursive defines

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Datenströme und rekursive defines
Im Kapitel “Datenströme” werden einige Streams definiert, die sich selbst als [FONT=courier new]tail[/FONT] haben. Habt ihr das mal im DrScheme (R5RS) ausprobiert?

Wenn ich nämlich z.B. Folgendes versuche:

[CODE](define (cons-stream head tail)
(cons head (delay tail)))

; Infiniter Strom von Einsen
(define ones (cons-stream 1 ones))[/CODE]
Dann bekomme ich die Fehlermeldung, dass [FONT=courier new]ones[/FONT] noch nicht definiert ist.

Tja, leider ist [FONT=courier new]cons-stream[/FONT] keine Spezialform, denn wenn ich es auflöse und statt dessen direkt mit [FONT=courier new]cons[/FONT] und [FONT=courier new]delay[/FONT] arbeite, dann geht’s problemlos:

(define ones (cons 1 (delay ones)))

Noch ein Workaround ist mir eingefallen (jetzt weiß ich endlich wozu das dumme [FONT=courier new]letrec[/FONT] taugt…):

(define ones (letrec ((ones (cons-stream 1 ones))) ones))

Oh, hab was überlesen:

[QUOTE]Konstruktor [FONT=courier new]cons-stream[/FONT] muss Spezialform sein, wobei
[FONT=courier new](cons-stream )[/FONT]
äquivalent ist zu
[FONT=courier new](cons (delay ))[/FONT][/QUOTE]

Aber was nutzen die tollsten theoretischen Konstrukte, wenn man sie nicht in die Praxis umsetzen kann?


jaja, sowas lernt man halt in der uni…
der kram is genauso hoch-theoretisch wie das niveau, dass er dabei schon wieder praktisch völlig unbrauchbar wird :lachen:


kA, was das soll, wurde wahrscheinlich gemacht, weil es halt im Sussman steht. Oder man wollte uns mal einen Ausblick auf die Dinge geben, die da kommen mögen.

Den ganzen Quark mit der Kontrollabstraktion und den Coroutien werden wir dann vielleicht nächstes Semester unter dem Begriff Threads wieder hören.

Und wenn [FONT=courier new]cons-stream[/FONT] eine Spezialform sein muss, dann kann man die doch mit Makros definieren, oder nicht? (Hab das Kapitel nur kurz überflogen, aber der Görz meinte doch, dass man mit Makros seine eigenen Spezialformen basteln könne)


Eigentlich sind die Datenströme schon ganz sinnvoll. Und die Continuations sowieso… wenn man’s mal verstanden hat (was etwas dauern kann).

Übrigens glaube ich, dass die Kontrollabstraktion nix mit Multithreading zu tun hat, sondern eher ein (umständlicher, wenn auch flexiblerer) Ersatz für C’s [FONT=courier new]break[/FONT], [FONT=courier new]continue[/FONT], [FONT=courier new]goto[/FONT] u.ä. ist.