[linux-l] Ocml vs. Java

Volker Grabsch vog at notjusthosting.com
So Okt 2 01:01:10 CEST 2005


On Mon, Sep 26, 2005 at 12:40:39PM +0200, Oliver Bandel wrote:
> On Sun, Sep 25, 2005 at 07:57:27PM +0200, Volker Grabsch wrote:
> > On Sat, Sep 24, 2005 at 02:45:40AM +0200, Oliver Bandel wrote:
> [...]
> > Nur mal des Interesses halber: Wie würdest du folgendes Problem in Ocaml
> > angehen? Du willst eine Funktion "list_file". Sie bekommt als Parameter
> > eine Datei (genauer: irgendeinen Stream, den man zeilenweise durchlaufen
> > kann), und liefert einen Iterator zurück. Diesen Iterator soll man
> > "aufheben" können, d.h. der Iterator soll zwischendurch auch wirklich
> > als einzelnes Objekt (bzw. Funktion) dastehen. Wenn man ihn später
> > durchläuft, iteriert er alle Zeilen der Datei, entfernt das Newline und
> > "trailing spaces", und setzt ein "XXX: " davor.
> 
> Sowas kann man doch klassisch imperativ machen, indem man eine
> Funktion hat, die eine Zeile einliest, trailing garbage weg schmeisst und
> den Rest ausgibt, und das "XXX: " davor setzt.
> Das ist doch etwas, das man in plain C machen kann oder jeder anderen
> üblichen Sprache auch.
> 
> Wozu muß man das als Iterator machen?
> 
> Oder warum sollte man es so machen?

Den Anwendungsfall habe ich einer anderen Mail schon beschrieben. Wenn
die Datenstruktur in Gemeinschaftsarbeit von mehreren Funktionen erzeugt
wird, sollte IMHO jede Funktionen statt einer Liste bloß einen Iterator
zurückgeben. Vorallem dann, wenn die "Datenstruktur" am Ende sowieso nur
serialisiert werden soll.

Sprachen wie Python, wo syntaktisch kaum Unterschiede zwischen Listen
und Iteratoren liegen, erleichtern diese Herangehensweise ungemein.

> > Einzige Bedingung: Keine
> > Listen! Das heißt, die Datei wird wirklich erst dann iteriert, wenn die
> > zurückgegebene Iterator aufgerufen wird.
> 
> Und das Ergbnis wird dann sofort ausgegeben?
> 
> Da könnte man in C z.B. die Standard-Funktionen nehmen.
> In OCaml entsprechende Pendants.
> Warum in Python nicht?

Natürlich geht das in Python auch:


f = open('datei','r')
for line in f:
	print "XXX"+line.rstrip()
close(f)


Aber darum geht es nicht. Mein Teilproblem hatte schon einen Sinn. Nur
das Drumherum habe ich möglichst einfach gehalten, damit das Teilproblem
besser isoliert ist.

> Was spricht statt ein Objekt zu nehmen oder einen Iterator
> zu bauen, dagegen, eine ganz normale Funktion zu nehmen?

Weil es später als Argument weitergereicht und in andere Strukturen
eingebaut werden soll. Ich zeig dir bei Gelegenheit einfach mal, wie
meine Applikation Daten exportiert. (z.B. für's Drucken)


Viele Grüße,

	Volker

-- 
Volker Grabsch
---<<(())>>---
Administrator
NotJustHosting GbR



Mehr Informationen über die Mailingliste linux-l