[linux-l] Ocml vs. Java

Oliver Bandel oliver at first.in-berlin.de
Mo Sep 26 22:54:53 CEST 2005


On Sun, Sep 25, 2005 at 07:57:27PM +0200, Volker Grabsch 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. Einzige Bedingung: Keine
> Listen! Das heißt, die Datei wird wirklich erst dann iteriert, wenn die
> zurückgegebene Iterator aufgerufen wird. Wir können nämlich auch sehr
> große Dateien haben, die auf keinen Fall zwischendurch komplett in den
> RAM geladen werden dürfen.
> 
> Das heißt, wir nehmen eine Datei "test.txt":
> 
> Zeile1      
> Zeile2      
> Letzte Zeile
> 
> Und folgenden Python-Code:
> 
> 	f = open("test.txt")
> 	iter = list_file(f)
> 
> 	for x in iter: print x
> 
> 	close(f)
> 
> 
> Dies sollte zurückliefern:
> 
> XXX: Zeile1
> XXX: Zeile2
> XXX: Letzte Zeile
> 
> In Python würde list_file so aussehen:
> 
> 	def list_file(f):
> 	    return ("XXX: "+line.rstrip() for line in f)



Vielleicht willst Du ja auch lazy evaluation haben
und dann solltest Du auf Haskell umsteigen.
(Gibt in OCaml aber auch ein Lazy-Module.
Viellecht passt das sogar besser als das Stream-Modul;
aber wenn lazy evaluation angesagt ist, ist wohl
Haskell König (und Clean kommt auch aus der Ecke, ist aber nicht
so elegant wie Haskell).


Ciao,
   Oliver




Mehr Informationen über die Mailingliste linux-l