Muster in Mma ,  WQ,  FS  2013

m1[f[x_]]:= f[x+1]

list1={f[x],f[2,3],g[y],f[1/x]}

Map[m1,list1]

(* next *)

m2[_[y_]]:= y/x

Map[m2,list1]

(*  ist alles auch mehrdimensional moeglich *)

Clear[f]
f[x_,y_]:= Sqrt[x^2+y^2]

{f[a,b],f[3,4]}

Clear[f]
f[{x_,y_}]:= {y,x}

Map[f,{ {1},{2,3},{4,5,6}}]

(* Vorangehende Definition der Fibonacci-Zahlen war nicht gegen 'falsches' Einsetzen gefeit *)

fib[0]=fib[1]=1;
fib[n_]:= fib[n-1]+fib[n-2]

fib[-3]

fib[5.5]

(* Ausweg: Alles 'Falsche' ausschliessen *)
Clear[fib]

fib[0]=fib[1]=1;
fib[n_?(IntegerQ[#]∧ NonNegative[#]&)]:= fib[n-1]+fib[n-2]

fib[-3]

fib[5.5]

(* Muster bedingter Vorschriften, Condition  /;  *)

ourBinom[n_,k_]:=n!/k!/(n-k)!  /;
 IntegerQ[n] ∧ IntegerQ[k]∧ n≥0 ∧ k≥0

list2={7,-5,Sqrt[12],5.5,z}

Map[ourBinom[#,2]&,list2]

(* Wichtige XxxQ-Funktionen: 
EvenQ     OddQ    ListQ    IntegerQ    MatrixQ 
allgemeine Abfrage mit: *)

?*Q

Typmuster   x_Typ  
Diese koennen mit konditionalen Mustern kombiniert werden

Clear[ourBinom]

ourBinom[n_,k_Integer?NonNegative]:= Product[(n-i-1)/i,{i,1,k}]

Map[ourBinom[#,2]&,list2]

(*  Nun gut, wie mathematisch vernuenftig das fuer n ist, ist eine andere Frage. Fuer k kontrolliert es gut: *)

Map[ourBinom[#,-5]&,list2]

(* next *)

Clear[f]

f[x_Integer]:= x

f /@ list2

(* Aber *)

Clear[f]

f[x_Real]:= x

f /@ list2

(* Die Integer sind keine 'Reals'  und  
die Wurzel auch nicht !! 1.Ausweg: *)

f[x_Integer]:= x

f /@ list2

?f

(* nun fuer alle rellen Zahlen :  *)

f[x_?NumericQ]:= f[N[x]]

f /@ list2

(* next 

Variable Parameteranzahl :  in Mma 
                      Plus   Times    Min   Max 

mit Platzhaltern  __  fuer ein oder mehrere Argumente
mit              ___  fuer null  -- " --             *)

relSum[a_,b_]:= (a+b)/(1+a *b)

relSum[a_,b_,c__]:= relSum[a,relSum[b,c]] // Together

relSum[x,y,z]

relSum[0.3,0.4,0.5,0.6]

relSum[a,1,b]

(*  next :   Wiederholte Muster   /.  und   //.    *)

a^2+2 a b^2 /. {a->b^2+1,b->2}

a^2+2 a b^2 //. {a->b^2+1,b->2}

(*  next :  Teillisten  und  Muster  *)

list3={1,a,b^c,d^3,e+f,Sqrt[3]}

Select[list3,MatchQ[#,_^_]& ]

u=12 (1+x)^5 // Expand

Cases[u,12_^_]

Cases[u,_ (x^4)]

Cases[u,_ __]

Select[u,MatchQ[#,_ __]&]

List @@ %

Cases[list3,_Symbol]

Count[list3,_Symbol]

MemberQ[list3,_Times]

(*  Eigene Operatoren definieren,  Bsp. relativistische Summe von Geschwindigkeiten *)

Clear[CirclePlus]
CirclePlus[a_,b_]:= (a+b)/(1+a *b)

CirclePlus[a_,b_,c__]:=CirclePlus[a,CirclePlus[b,c]] // Together

x ⊕y⊕z                    (*  Esc C+ Esc  *)

0.3⊕0.4⊕0.5⊕0.6

a⊕1⊕b

2⊕2