Pure Functions sind Funktionen, die keinen eigenen Namen besitzen. Ihre Definition ist ihre einzige Bezeichnung. In der formalen Logik und in LISP bezeichnet man sie als -Ausdrücke oder anonyme Funktionen. Wenn eine Funktion nur an einer einzigen bestimmten Stelle gebraucht wird, erspart man sich dadurch eine separate Funktionsdefinition und das Suchen eines geeigneten Namens.
In[2]:= sq /@ {a,b}
Out[2]= {a^2, b^2}
In[3]:= (#^2)& /@ {a,b}
Out[3]= {a^2, b^2}
Bei funktionalen Operatoren (Map, Apply, Fold, ...) muß immer eine Funktion angeben werden:
In[4]:= Nest[f, x, 3]
Out[4]= f[f[f[0]]]
Ist die Funktion in der Form f[x_]:=defintionbody definiert, so ensteht ein Defintions-Overhead, sowohl syntaktisch als auch semantisch.
Pointe: Die Definition einer Pure Function ist gleichzeitig ihr Name.
&
(#
für das Argument)
&
(#1
, #2
, #n
für das erste, zweite,
nte Argument)
Anwendung:
Evaluierung: An jeder Stelle in , an der vorkommt, wird der Wert von buchstäblich ersetzt (,,replaced``), es erfolgt keine vorherige Evaluierung von und .
Function[, ][] /. ->
(-Conversion)
und werden in letzterem Fall nicht evaluiert, sondern bleiben
bestehen, d.h. der eigentliche Mathematica-Ausdruck lautet:
(Hold[] /. HoldPattern[] -> ) // ReleaseHold
Function[, ] Function [, ]
(-Conversion)
Function[, []] []]
(-Conversion)
In[6]:= Function[x, x/2][4]
Out[6]= 2
In[7]:= Function[x, x/2][4, 6]
Out[7]= 2
In[8]:= Function[x, x/2][x]
Out[8]= x/2
In[9]:= x=2; Function[x, x/2][x]
Out[9]= 1
In[10]:= #/2 & [4]
Out[10]= 2
In[11]:= #/2 & 6
Out[11]= 6 (#1/2 &)
Eine Funktion, die eine Funktion zurückliefert:
In[12]:= pow[n_Integer] := Function[x, x^n]
Out[12]=
In[13]:= pow[2]
Out[13]= Function[x$, x$^2]
In[14]:= % [4]
Out[14]= 16
In[15]:= pow[3][3]
Out[15]= 27
Redundanz:
In[16]:= f[#]& /@ {a, b, c}
Out[16]= {f[a], f[b], f[c]}
kürzer: f /@ {a, b, c}