Studium, Ausbildung und Beruf

web uni-protokolle.de
 powered by
NachrichtenLexikonProtokolleBücherForenSonntag, 26. Oktober 2014 

Funktionale Programmiersprache


Dieser Artikel von Wikipedia ist u.U. veraltet. Die neue Version gibt es hier.
In einer funktionalen Programmiersprache werden Berechnungen als Auswertung mathematischer Funktionen verstanden. Im Unterschied dazu werden in prozeduralen (oder imperativen) Programmiersprachen Berechnungen als Befehlssequenzen dargestellt die nacheinander werden. Die mathematische Grundlage der funktionalen Programmierung der λ-Kalkül .

Anders ausgedrückt:

  • Ein funktionales Programm ist eine Abbildung Eingabedaten auf Ausgabedaten wohingegen ein imperatives Programm eine Arbeitsanweisung für eine Maschine ist. (Pepper)
  • In einem funktionalen Programm wird die Reihenfolge der Berechnungsschritte in der Regel nicht festgelegt während ein imperatives Programm ohne Reihenfolge der Abarbeitungsschritte gar nicht verstanden werden
  • Funktionale Programmiersprachen erlauben es Funktionen (wie als Argumente und Rückgabewerte anderer Funktionen zu Dadurch ist es einfach Operatoren auf Funktionen zu definieren. Dies macht Programme oft kürzer und abstrakter erfordert jedoch eine Umgewöhnungszeit für Programmierer die den imperativen gewohnt sind.

Inhaltsverzeichnis

Konzepte

Reine Funktionale Programmiersprachen

Reine (engl. pure ) funktionale Programme können als mathematische Funktion werden: Ein Ausdruck hat dort während der immer den gleichen Wert. Es gibt keine Zustandsvariablen die während einer Berechnung geändert werden. bezeichnet diese Eigenschaft als Werttreue (engl. referential transparency ). Sie vereinfacht Korrektheitsbeweise von Algorithmen wesentlich. erwünschte Seiteneffekte (Benutzerinteraktion Eingabe/Ausgabe-Operationen) beschreiben zu können sind besondere Vorkehrungen notwendig. Die meisten funktionalen Programmiersprachen allerdings Seiteneffekte und sind daher keine reinen Programmiersprachen (Ausnahme: Haskell ).

Funktionen Höherer Ordnung

Man unterscheidet Funktionen erster Ordnung und Funktionen höherer Ordnung . Bei Funktionen höherer Ordnung sind Funktionen Werte. Dies erlaubt es insbesondere Funktionen als oder Parameter anderer Funktionen zu verwenden. Ein Beispiel ist der Ableitungsoperator : Eingbabe ist eine differenzierbare Funktion Ausgabe die Ableitung dieser Funktion. Ein Beispiel aus Informatik ist map um eine beliebige übergebene Funktion f auf jedes Element einer Liste anzuwenden. in Haskell :

 map f [] = [] map (x:xs) = f x : map f  

In der ersten Zeile wird das für eine leere Liste [] zurückgegeben; die Zeile wendet die Funktion f auf das erste Listenelement x an und führt dann einen Rekursionsschritt für die restliche Liste xs durch.

Bedarfsauswertung und Strenge Auswertung

Funktionale Sprachen kann man auch nach Auswertungsstrategie unterscheiden: Bei strenger Auswertung (engl. eager bzw. strict evaluation ) werden Ausdrücke sofort ausgewertet. Dem gegenüber die Bedarfsauswertung (engl. lazy evaluation ) bei der Ausdrücke erst ausgewertet werden deren Wert in einer Berechnung benötigt wird. lassen sich z.B. unendlich große Datenstrukturen (die Liste aller natürlicher Zahlen die aller Primzahlen etc.) definieren und bestimmte Algorithmen sich. Manche Berechnungen lassen sich mit strenger andere mit Bedarfsauswertung effizienter ausführen.

Typisierung

Weiterhin kann man funktionale Sprachen einteilen dynamisch und statisch typisierte Sprachen die sich dadurch ergeben dass Typprüfung während der Laufzeit bzw. während der stattfinden kann. Programmiersprachen wie Haskell und SML sind statisch typisiert und unterstützen Typeninferenz der Compiler erkennt die Datentypen automatisch). Programmiersprachen der Lisp -Familien sind dynamisch typisiert.

Ein Beispiel in SML

 local val pi = 3.14; val = fn x => x*x; in val = fn (R r) => pi*(sq R sq r); end;  

Dieses Programm definiert eine Funktion ringarea die die Fläche berechnet welche zwischen beiden konzentrischen Kreisen mit den Radien R und r liegt. Dazu werden die Konstante pi und die Hilfsfunktion sq definiert. Diese werden von ringarea dann die Berechnung benutzt.

Funktionale Programmiersprachen




Bücher zum Thema Funktionale Programmiersprache

Dieser Artikel von Wikipedia unterliegt der GNU FDL.

ImpressumLesezeichen setzenSeite versendenSeite drucken

HTML-Code zum Verweis auf diese Seite:
<a href="http://www.uni-protokolle.de/Lexikon/Funktionale_Programmierung.html">Funktionale Programmiersprache </a>