[linux-l] Ocml vs. Java
Oliver Bandel
oliver at first.in-berlin.de
Mo Nov 21 00:12:24 CET 2005
On Sun, Oct 16, 2005 at 11:11:30AM +0200, Volker Grabsch wrote:
> On Sat, Oct 15, 2005 at 09:28:13PM +0200, Oliver Bandel wrote:
> > On Sat, Sep 24, 2005 at 02:45:40AM +0200, Oliver Bandel wrote:
> > [...]
> > > Btw: Die Sache mit den Verschachtelungen sehe ich noch ein bischen
> > > anders. Man kann sich auch Funktionen als composites erstellen.
> > > In Haskell gibt es dafür sogar einen eigenen Operator (".").
> > [...]
> >
> >
> > "The direct combination of functions by means of the operator '.' which we
> > have seen here is not possible in other programming paradigms, or at least
> > it would be an 'advanced' aspect of the language, rather than appearing on
> > page 11 of an introductory text."
> > (Simon Thompson, "Haskell")
>
>
> Naja ... also bei Ocaml bzw. Python bzw. Ruby ist es kein Ding, sowas
> auch schnell selbst zu schreiben:
>
> def wende_an(start,*funcs):
> result = start
> for func in funcs:
> result = func(result)
> return result
Wobei das bei einer Reihe solcher Konstrukte
nicht mehr so einfach geht.
(oder lannst Du mal 'n beispiel brigen? sollen das da Listen
von Funktionen sein?)
Bei Haskell kann man den "."-Operator auch auf eine
Reihe von Funktionen anwenden, nicht nur auf zweie,
so, wie man in der Shell die Pipe immer wieder
anwenden kann:
$ ls -l | sort -u -k5 | grep -v txt | less
oder so.
Und das dann in Haskell mit dem "."-Operator
zwischen diversen Funktioenn - quasi eine Pipleine...
da wird dann aus
let fges x = f1 ( f2 ( f3 (x) ) )
etwas wie:
fges = f3 . f2 . f1
(oder so ähnlich... ist schon ne weile her, daß ich mit Haskell
herum gebaut habe, aber sinngemäß geht es genau so)
Man spart sich die ganze Klammerei...
...das ist echt super-genial in Haskell gelöst.
(Auch das IO-Zeugs mit den Monaden ist dem ja ähnlich...)
Wenn man also wirklich krasse Kaskaden von Funktionen
aufbauen muß, dann kann man sowas in haskell ganz bequem
und elegant lösen. IMHO macht das keine andere Sprache so.
Ciao,
Oliver
Mehr Informationen über die Mailingliste linux-l