Definition: Funktion

hi an alle und ein frohes neues,

ich habe hier mal eine kleine Frage an die Experten Community. ich arbeite gerade an einer Hausarbeit und versuche gerade in kurzen knappen Saetzen zu beschreiben was eine Funktion (LISP) ist, natuerlich als Definition. wikipedia spuckt leider nichts aus. habt ihr eine Idee?

vielen dank, denn auch googlen brachte nicht allzuviel sinnvolle Ergebnisse.

cheers josh

allgemein sollte da in etwa sowas hin wie:
"eine Funktion ist eine Prozedur die einen RĂĽckgabewert hat.
So ist es möglich mit Hilfe einer Funktion eigene >Befehle

Eine Funktion ist eine Abbildung von Eingabeparametern auf Ausgabeparameter. Eine Funktion ist (im Gegensatz zu einer Prozedur) seiteneffektfrei, das heisst das die Funktion bei gleichen Eingabeparametern IMMER die gleichen Ausgabeparameter berechnet. (Wobei es meistens bei Funktionalen Programmiersprachen wie Lisp Ausnahmen gibt, z.B. bei Ein/Ausgabe, da als Nebeneffekt die Ausgabe erzeugt wird…)

Dann vielleicht noch interessant: Der Unterschied in der Funktionsabarbeitung von Call by value und call by name. Ersteres berechnet erst die Parameter und dann den Funktionswert davon, call by name berechnet die Parameter erst wenn sie benutzt werden. Das kann ähnlich die strikten/nicht-strikten Auswertung von Bedingungen in anderen Programmiersprachen zu Fehlern führen.

Ralph

hi Ralph,

vielen dank, dass sieht ja mal ganz gut aus. knapp und formal korrekt.

dass kann ich nehmen.

cu josh

…

Prozedur) seiteneffektfrei, das heisst das die Funktion bei
gleichen Eingabeparametern IMMER die gleichen Ausgabeparameter
berechnet. (Wobei es meistens bei Funktionalen

…

*rumblödel*
was ist dann mit Funktionen solcher art wie: rand(), time() u.a. ?

nein ich weiß…
& auch nicht wirklich wichtig :wink:

*/rumblödel*

was ist dann mit Funktionen solcher art wie: rand(), time()
u.a. ?

nein ich weiß…
& auch nicht wirklich wichtig :wink:

Erst mal sind Funktionen ohne Eingabeparameter Konstanten. Bei rand() und time() trifft das nicht zu, da wirst du mir zustimmen :wink:.
rand() und time() sind also keine Funktionen im eigentlichen Sinne, da sie einen internen Zustand besitzen (letzte Zufallszahl bzw. Elemente die zur Erzeugung der Pseudozufallszahlen dienen, wie Uhrzeit, Plattenzugriffe o.ä. bzw. die aktuelle Uhrzeit.)

Trotzdem werden sie von den meisten Programmiersprachen als Funktionen betrachtet. Wie schon oben gesagt sind auch Ausgabefunktionen in Lisp keine richtigen Funktionen, da sie „nebenbei“ eine Ausgabe erzeugen. In Programmiersprachen wird die Anwendung von Funktionen selten strikt gehandhabt. Dort unterscheidet man zum Beispiel selten zwischen Funktionen und Prozeduren mit Ausgabeparametern.

Ralph