Hallo zusammen,
Die Funktion einer Funktion benutze ich immer dann; wenn man mit der
üblichen Syntax nicht mehr weiter kommt, also z.B. wenn eine
BlankSequence auf eine BlankSequence folgt:
plustimes[x__][y__] := Plus @@ {x} + Times @@ {y}
plustimes[a, b, c][e, f, g]
ergibt
a + b + c + e*f*g
wenn BlankSequences typfrei aufeinander folgen, dann hat man die falsche
Funktionssignatur gewählt: Eine Funktion badFct[a__, b__] ist wegen der
Definition von BlankSequence unbrauchbar um "a" von "b" zu unterscheiden
(da gleichranging mit badFct[a__]), wenn nicht wenigstens der Typ
wechselt: aFct[a__Integer, b__Real]. Mathematica hat auch insofern mit
Mathematik zu tun, dass nicht jeder Ausdruck, der notiert werden kann,
nur darum ein mathematischer Ausdruck ist, weil er aus built-in
Symbolen besteht.
Wenn man die Typen nicht kennt und die Längen auch nicht, dann benutzt
man Listen:
In[6]:=
Clear[klamserUeblicheSyntax];
klamserUeblicheSyntax[a_List, b_List] :=
Which[Length[a] > 0 && Length[b] > 0, Plus @@ a + Times @@ b,
Length[a] > 0 && Length[b] == 0, Plus @@ a,
Length[a] == 0 && Length[b] > 0, Times @@ b,
True, 0]
mit anderen Worten
In[19]:=
Clear[klamserSyntax];
klamserSyntax[a_List, b_List] := Sign[Length[a]] (Plus @@ a) +
Sign[Length[b]] (Times @@ b)
und fort ist die Versuchung, etwas "unübliches" zu konstruieren.
Gruss
Udo.