# MAPLE fuer ANALYSIS # RWTH -Aachen, Wintersemester 1997/98 # E. Goerlich # # Maple -Input von Kapitel 9: # Kapitel 9: Namengebung, Wertzuweisung # ============================================== # Namengebung: # Namen f"ur einen Ausdruck (expression): > test2:=cos((a+b)*x); > test3:= cos(a)-sin(b)+exp(17)-sum(1/k,k=1..50); # f"ur ein Programm (eine Funktion): > z:=proc(x)local m, result; result := 0; if > type(x, integer) = false then FAIL else if x<1 then FAIL else if x = 1 > then result; else for m from 2 to x do sqrt(2+2*result)/2; result:= "; > od; fi; fi; fi; end; > z; > print(z); # f"ur eine durch den arrow-Operator definierte Funktion: > h:= x->evalf(cos(x)); # Aufruf von z und h: > h(Pi/32); > evalf(z(5)); # ============================================== # Wertzuweisung: > x:=1; # protected / unprotected # L"oschen eigener Namen: > h:='h'; > h(Pi/32); # "Uberschreiben eigener Namen: > z:= NeuerName; > z(5); # ====================== ====================== # Maple-eigene Namen sind "protected", das heisst, sie k"onnen nicht # versehentlich "uberschrieben werden: > sin:=15000; > I:=1; > gamma:=5; > Int:=int(1/x,x=1..2); > rhs:=sin(x); # =============================================== # Namengebung machte in Kap. 6, S. 47, aus einem plot eine # Plot-Struktur. # =============================================== # Regeln f"ur die Vergabe von Namen: # Keine Leerstellen! > test 1:=expand(cos(10*x)); # 1.Ausweg: underscore-Zeichen > Test_1:=expand(cos(10*x)); # 2.Ausweg: string-quotes > `test 1`:=expand(cos(10*x)); # Dann kann der Name "test 1" aber auch nur als string # aufgerufen werden, d.h. nicht so: > test 1; # sondern so: > `test 1`; # Oft kommen auch indizierte Namen vor. Man erzeugt sie mittels der # eckigen Klammern: > test[1]:=expand(cos(10*x)); > test[1]; # Das deutsche Wort "Index" heisst im Englischen "subscript". # Doppelindizes: > test1:='test1'; > test1[2][alpha]; # ============================================ # Hier noch einige Beispiele f"ur falsche Namengebungen. Sie zeigen, # dass die gr"ossere Wahlfreiheit, die man durch Verwendung von strings # hat, nicht zu Konflikten mit den eingebauten Namen f"uhrt: # Ein gesch"utzter Name kann auch als string nicht "uberschrieben # werden: > `sin`:=expand(cos(10*x)); # Es gibt noch einen weiteren Schutzmechanismus: > `cos`:=expand(cos(10*x)); # Dies ist ein wichtiges Problem bei der Namengebung: # Das Objekt, das benannt wird, darf selbst ein Name sein. # Damit besteht prinzipiell die Gefahr, dass eine Kette von # aufeinander bezogenen Namen unabsichtlich geschlossen wird. Ist die # Kette widerspruchsfrei, so passiert nichts: > restart; > test1:=a; > test2:=test1; > a:=test2; # Wenn aber die Definitionen widersspr"uchlich sind, wird das von Maple # in einfachen F"allen bemerkt. > restart; > test1:=a;test2:=test1; > a:=test2^2; # Maple hindert den Benutzer nicht daran, trotz der Warnung # weiterzumachen. > test1; # ============================================ # Siehe auch: "alias", Datentypen, Interne Darstellung von Gr"ossen.