Was ist der Unterschied zwischen funktionaler und applikativer Programmierung?

...komplette Frage anzeigen

2 Antworten

Funktionale Programmierung ist das Programmieren mit Funktionen. Dabei wird nicht zwischen Daten und Funktionen unterschieden. 

Applikativ bedeutet doch nur, dass etwas auf etwas anderes angewendet wird. Also in Haskell, einer funktionalen Programmiersprache z.B. 

sum $ map (+2) [1,2,3,4]

dabei wird auf jedes Element der Liste [1,2,3,4] die Funktion (+2) gemapt, bzw. angewendet, und danach alles aufsummiert. Ist aber letztlich nur eine hintereinanderausgeführte Applikation von Funktionen... In python wäre dass dann 

sum(map(lambda x: x+2, [1,2,3,4]))

is auch applikativ, nur hässlicher :P

genauso aber auch: print("bla") da wird eben print auf "bla" sozusagen appliziert

Python ist keine funktionale Programmiersprache so wie Haskell, aber map wird z.B. als Argument wieder eine Funktion übergeben, Funktionen sind in Python sogenannte Bürger erster Klasse, aber das hat schnell seine Grenzen in Python, so ist z.B. map fest in Python eingebaut, wohingegen man in Haskell eine effiziente Implementation von map sehr einfach selbst machen kann, wenn man möchte.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Athenos07
15.02.2016, 10:59

Okay. Ist Applikative Programmierung damit per Definition seiteneffektfrei?

0

In http://cs.uni-muenster.de/Professoren/Lippe/lehre/skripte/ApplProg1-56.pdf liest man:

Beim applikativen bzw. funktionalen Stil ist die Funktionsanwendung das beherrschende Sprachelement. Bereits früh entstand als erster Vertreter dieses Programmierstils die Sprache LISP. Sie hat inzwischen eine Reihe von moderneren Nachfolgesprachen gefunden. Dieser Programmstil hat sich insbesondere im Bereich der symbolischen Informationsverarbeitung und der Künstlichen Intelligenz (KI) durchgesetzt.

Was hier gesagt wir, bedeutet:

  • Applikative Programmierung ist nur ein anderes Wort für (den weiter verbreiteten) Ausdruck funktionale Programmierung.
  • Dieser Programmierstil zeichnet sich dadurch aus, dass jeder - aber auch wirklich jeder - Befehl die Form eines Funktionsaufrufes hat und daher genau ein Ergebnis produziert.


Letzteres ist der wesentliche Unterschied zu prozeduraler Programmierung: Dort nämlich kann jeden Befehl Aufruf einer Prozedur sein. So ein Aufruf aber kann - geeignete Definition der Prozedur vorausgesetzt - eine beliebig große Anzahl von Ergebnissen errechnen.

Wichtiger Spezialfall prozeduraler Programmierung ist objektorientierte Programmierung: Es hat dort jede Prozedur die Form einer Methode (d.h. sie hat einen impliziten Parameter, der das Objekt darstellt, dem die Methode zugeordnet ist). 

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Athenos07
15.02.2016, 12:26

Muss die objektorientierte Programmierung prozedural sein? Wenn Das aufrufende Objekt ein impliziter Parameter ist, kann die Methode doch auch nur ein einziges Ergebnis zurückgeben.

0

Was möchtest Du wissen?