Nest[ ,
,
]
[
[
[
[
]
] ] ]
In FORTRAN (prozeduraler Stil) könnte man folgendes Konstrukt verwenden:
Res=x DO 100 I=1, n Res=F(Res) 100 CONTINUE
NestList[,
,
]
{
,
[
],
[
[
]],...,
[
[
[
[
]
]]]}
NestList[,
,0]
{
}
NestList[,
,1]
{
,
[
]}
Nest und NestList eignen sich besonders für die Iteration von Funktionen mit nur einem Argument. Diese müssen ihr eigenes Ergebnis wieder als Argument akzeptieren. Grundsätzlich lassen sich alle tail-recursive-Algorithmen mit Nest formulieren.
In[2]:= f[{x_,y_}]:=x+y
Out[2]=
In[3]:= Nest[f,{1,2},3]
Out[3]= f[f[3]]
f erwartet eine Liste mit zwei Elementen als Argument, liefert
aber eine Zahl als Ergebnis.
Fold[,
,{
,
,...}]
[
[
[
[
,
],
],
]
]
FoldList[,
,{
,
,...}]
{
,
[
,
],
[
[
,
],
],...}
Moore Automaten kennen
Die diskrete Entwicklung des Automaten bei gegebenem Input von einem bestimmten Anfangszustand kann mit folgendem Programm untersucht werden:
In[4]:= Automat[1,0]:=4
Out[4]=
In[5]:= Automat[1,1]:=3
Out[5]=
In[6]:= Automat[2,0]:=1
Out[6]=
In[7]:= Automat[2,1]:=3
Out[7]=
In[8]:= Automat[3,_]:=4
Out[8]=
In[9]:= Automat[4,_]:=2
Out[9]=
In[10]:= evolve[aut_,initstate_,input_List]:= Fold[aut,initstate,input]
Out[10]=
In[11]:= evolve[Automat,1,{0,0,1,1}]
Out[11]= 4
Map[, {
,
,
,...}]
{
[
],
[
],
[
],...}
Spezielle Eingabeform: /@ {
,
,
,...}
Map[,
,
]
ist eine Liste, die angibt, auf welche Stufen von
die
Funktion
angewendet werden soll.
(z.B. {
} wodurch
nur auf die
te Stufe oder
{
,
} wodurch
auf die
te bis einschließlich
te
Stufe angewendet wird)
expression | f | [ | g | [ | h | [![]() |
u | [![]() |
Stufe | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
In[13]:= sq[x_]:=x^2
Out[13]=
In[14]:= sq /@ Range[5]
Out[14]= {1,4,9,16,25}
sq /@ {1,2,3,4,5}
{sq[1], sq[2], sq[3], sq[4], sq[5]}
In[15]:= f /@ {{1,2},{a,b}}
Out[15]= {f[{1,2}], f[{a,b}]}
In[16]:= Map[f,{{1,2},{a,b}},{2}]
Out[16]= {{f[1],f[2]},{f[a],f[b]}}
In[17]:= Map[f,{{1,2},{a,b}},2]
Out[17]= {f[{f[1],f[2]}],f[{f[a],f[b]}]}
Verwandte Operatoren: MapAll, MapAt, MapIndexed, MapThread.
In[18]:= MapThread[f,{{a,b,c,...},{1,2,3,...}}]
Out[18]= {f[a,1],f[b,2],f[c,3],...}
Apply[,
]
Apply to the head of
. =
Ersetze den Kopf von
durch
.
Kurzschreibweise: f @@ expr
In[20]:= And @@ {True, False, True}
Out[20]= False
In[21]:= Or @@ {True, False, True}
Out[21]= True
Thread[[
,
,...]]
Threads over any lists that appear in arguments
,
, ...
Wenn mehrere Listen als Argumente übergeben werden, müssen sie dieselbe Länge besitzen.
In[23]:= Thread[f[{a,b,c},{1,2,3}]]
Out[23]= {f[a,1], f[b,2], f[c,3]}
In[24]:= Thread[f[{A,B,C},{a,b,c},{1,2,3}]]
Out[24]= {f[A,a,1], f[B,b,2], f[C,c,3]}
In[25]:= Thread[f[a,{1,2,3},A]]
Out[25]= {f[a,1,A], f[a,2,A], f[a,3,A]}
Thread
ist somit in gewisser Weise ,,verwandt`` mit dem Attribut
Listable
. Wenn dieses Attribut besitzt wird
Thread
sozusagen
automatisch ausgeführt.