[linux-l] Ocml vs. Java

Oliver Bandel oliver at first.in-berlin.de
Do Sep 29 13:00:09 CEST 2005


On Fri, Sep 23, 2005 at 06:36:47PM +0200, Volker Grabsch wrote:
> On Thu, Sep 22, 2005 at 10:32:15PM +0200, Oliver Bandel wrote:
> > > Doch, doch, genau wie in Python wird das auch in Ruby an den Stellen
> > > eingesetzt, wo es sinnvoll ist. Aber die meisten funktionalen Konzepte
> > 
> > Ich meinte nicht, ob diese features eingesetzt werden, sondern
> > ob Ruby selbst eingesetzt wird.
> > IMHO nur sehr selten.
[...]

> Wäre Python statisch typisiert, wären solche Konstrukte vielleicht auch
> in Python nötig ... glaub ich aber nicht ... Listcomprehensions könnte
> man in Ocaml sicher gut einbauen, sie würden sicher die Lesbarkeit
> vieler Standard-Konstrukte erhöhen.


letztens habe ich da ein paper überflogen.. da wurde übrigens Python
als schwacht typisierte Sprache bezeichnet. :)


[...] 
> Iteratoren sind ein Muster, das man mit funktionalen Elementen relativ
> einfach zusammenbauen kann. Und zwar sehr viel einfacher, als in reinen
> OO-Sprachen wie Java. Aber in Python (und auch Ruby, AFAIR) kann man sie
> eben direkt verwenden, und direkt ablaufen lassen. Das erspart jeweils
> eine Ebene von verschachtelten Funktionen.

Naja, in Funktionalen Sprachen kann man sich so eine Ebene aber
in eine HOF (Higher-Order-unction) giessen und muß nicht das ganze
Konstrukt jedesmal wieder neu bauen.
Man schreibt eine Funktion, die einem das Konstruieren von Funktionen
übernimmt, welche man dann nach belieben anwenden kann.




> Man kann sich "direkter"
> ausdrücken, das erleichtert das Verstehen von Code enorm. Und eben diese
> bessere Lesbarkeit ist es, die den Python-Leuten wichtig ist.


Das sich-direkter-Ausdrücken kann man sich in FPLs selbst erzeugen.
und dann ist es nach eigenem Gusto, nicht nach dem des Sprachdesigners.
Aber wenn Python auch FP-Features beitet, sollte da ja auch einiges möglich
sein.




[...]
> Man man Iteratoren genauso handhaben wie Listen, und in seiner Denk-
> Ausdrucksweise braucht man also nur noch an Listen zu denken, obwohl
> man es u.U. mit Iteratoren zu tun hat. Das finde ich in Python sehr
> angenehm.
> 
> Beim funktionalen Ansatz hingegen muss man mit den Iteratoren wie mit

Du sagste einerseits, Python ist auch funktional, dann aber unterscheidest
Du zwischen python und funktionalem Programmiern.... hmhhh... woher
diese Unterscheidung?


> verschachtelten Funktionen umgehen, und sie ständig auf diese Weise
> im Hirn halten.

Einmal eine HOF geschrieben und angewendet, und fertig ist der Lack.


[...]
> Und nun zu einem weiterem Standard-Konstrukt: map/filter. Sie werden
                            ^^^^^^^^^^^^^^^^^^^

Eben. Anwendbar für viele Fälle.
Aber wenn man ganz spezielle Funktionen braucht, sollte man sich
diese scheiben.


[...]
> Nun die funktionale Variante mit map/filter:
> 
> 	map(ausgabe,filter(kleiner10,map(durch2,filter(gerade,liste))))


Wenn man solche Konstrukte nimmt, statt eine eigene Funktion zu schreiben,
dann ist das natürlich nicht das Optimum...

...davon abgesehen sieht man hier aber auch, wie man aus vorgegebenen
Funktionen sich ein recht komplexes gebilde bauen kann, einfach durch Kombination
von Funktionen.





[...]
> Funktionale Elemente werden damit nicht komplett aus Python verbannt.

Na, was meinst Du, vielleicht sind es sogar welche, auf die Du Dich da berufst... :)


Gruß,
   Oliver





Mehr Informationen über die Mailingliste linux-l