Beispiel 1:
paralist_t parameterliste = {0,NULL};add_param(parameterliste,"PI",3.1415);
Der Parametername
wird beim Auswerten des Funktionsstrings durch den Parameterwert ersetzt.
Der Vorteil von Parametern ist, daß man einen vorhandnen Funktionsstring
nicht neu generieren muß, wenn sich ein variabler Wert in der Funktion
ändert. Hier kann einfach der Parameterwert verändert werden.
Dafür wird die Funktion set_param() bereit gestellt.
Beispiel 2:
set_param(parameterliste,"PI",PI);
Enthält die angegebene Parameterliste
keinen Eintrag mit dem angegebenen Namen, so wird dieser Parameter wie
mit add_param() erzeugt.
Beispiel 3:
ntuple_t *result = NULL;add_param(parameterliste,"x",0);add_param(parameterliste,"y",1);add_param(parameterliste,"z",2);result = eval_term("(x * PI,y * PI,z * PI)",parameterliste);
Man kann natürlich das Beispiel 3 auch so lösen:
Beispiel 4:
ntuple_t *resultx = NULL;ntuple_t *resulty = NULL;ntuple_t *resultz = NULL;resultx = eval_term("x * PI",parameterliste);resulty = eval_term("y * PI",parameterliste);resultz = eval_term("z * PI",parameterliste);
Matrizen können nicht als Ergebnis
von eval_term() zurück gegeben werden.
Beispiel 5:
result = eval_term("(sin(Winkel * PI / 180) * Breite, cos(Winkel * Pi / 180) * Hoehe)",paralist);
Die Rangfolge der Operatoren:
1. ^ (Achtung: ist nicht Linksassoziativ)2. * , / , %3. + , -4. = , < , > , #5. & , |
Mathematisch:
sin(x)cos(x)tan(x)asin(x)acos(x)atan(x)sinh(x)cosh(x)tanh(x)asinh(x)acosh(x)atanh(x)logn(x)logd(x)ceil(x)floor(x)abs(x) oder fabs(x)sqrt(x)sqr(x)pow(x,y)mod(x,y)drand() oder rand()seedrand(x)
isnan(x)not(x)and(x,y)or(x,y)xor(x,y)
{<equal>:<term>;<equal>:<term>...}
<equal> ist ein Term, dessen Ergebnis
als Wahr oder Falsch interpretiert wird. Falls <equal> Wahr ist, dann
ist das Ergebnis der partialdefinierten Funktion das Ergebnis von <term>
der direkt auf <equal> folgt. Um ein Abstürzen der Funktion eval_term()
beim Auswerten von solchen Funktionen zu vermeiden, sollte die entsprechende
Funktion über den gesamten Wertebereicht definiert sein. Außerdem
erhält man sonst, irgendwelche undefinierten Werte. Wichtig sind die
beiden geschweiften Klammern, die die Funktion einschließen. Auch
geschachtelte partialdefinierte Funktionen sollten, wenn dies auch unsinnig
ist, möglich sein.
Dortmund, 18.2.1996