LEHRSTUHL A FÜR MATHEMATIK [~/ANA00/02.txt] Prof. Dr. E. Görlich Sommersemester 2000 20.04.2000 MAPLE für ANALYSIS II ====================== 1) Listen, sort-Befehl, Inhaltsverzeichnis ========================================== Ziel: Herstellung eines Stichwortverzeichnisses der Vorlesung Maple fuer Analysis I im Wintersemester 1999/2000. Problem: Wir haben eine Liste L von Listen der Form ["inert maple input",3], die aus Paaren von Daten bestehen: Je ein Stichwort (das aus mehreren Worten bestehen kann und deshalb als "string" gegeben ist) und eine Zahl, die Nummer des zugehoerigen Paragraphen. Die Liste soll alphabetisch nach Stichworten sortiert werden. Versuch mit "sort": > restart: > ?sort Zunaechst Versuch mit einer kleinen Liste aus Listen: > L:=[["cursor",1],["limit",2],["Limit",2],["inert maple input",3],[">",1]]; > L[1]; > nops(L); "sort" kann gemaess einer vom Benutzer gegebenen booleschen Funktion F sortieren. Wir definieren F so, dass F die Listen x und y nach ihren ersten Elementen mittels "<" sortiert. > ?boolean > ?`<` > ? less > ? sort > sort([c,C,b,a,B,A],<); > sort([c,C,b,a,B,A],"<"); > whattype("<");whattype("numeric"); > sort([c,C,b,a,B,A],"numeric"); > sort([c,C,b,a,B,A]); > evalb(a ?evalb Maple sortiert auch Buchstaben unter der Relation "<". > F:=proc(x::list,y::list) if op(1,x) < op(1,y) then true else false fi end; > F(L[1],L[2]); > F(L[4],L[5]); > E:=sort(L,F); > E[1]; > op(E[1]); > ?printf Der "format string" %A bewirkt, dass beliebiger Text folgt und eventuelle Anfuehrungsstriche weggelassen werden. Wird nur ein "format string" gegeben, so erscheint nur der erste Operand von op(E[1]): > printf("%A",op(E[1]));printf("%A",op(E[4])); Will man beide Operanden, so sind zwei "format strings" erforderlich. Wir koennen sie trennen durch " ... ": > printf("%A ... %a",op(1,E[1]),op(2,E[1])); Erster Versuch: Programm "StwVerz1" soll Liste L in ein Stichwortverzeichnis verwandeln: > StwVerz1:=proc(E::list) local j; for j from 1 to nops(E) do printf("%A ... %a",op(1,E[j]),op(2,E[j])) od end; > StwVerz1(E); Man kann durch Einfuegen des C-Befehls \n ("newline") erreichen, dass die einzelnen Paare in separaten Zeilen erscheinen: > StwVerz2:=proc(E::list) local j; for j from 1 to nops(E) do printf("%A ... %a\n",op(1,E[j]),op(2,E[j])) od end; > StwVerz2(E); ======================================================================== Nun ist die Liste der im vergangenen Semester behandelten Maple-Befehle mit Paragraphen-Nr. einzugeben. > L; Hinzufuegen eines Elements zu einer Liste: > L:=[op(L),["input",1]]; > L:=[op(L),["restart",2],["plot",2],["?",2]]; Duplikate koennten versehentlich eingegeben werden: > L:=[op(L),["Limit",2]];nops(L); Entferne sie: > L:=convert(L,set); > L:=convert(L,list);nops(L); Es folgt das Eingeben der Liste, gekennzeichnet durch: ########### ........ ########### ################################################################################# ################################################################################# ################################################################################# > L:=[op(L),["sum",2],["Sum",2],["simplify",2],["%",2]];nops(%); > L:=convert(L,set); > L:=convert(L,list);nops(L); > L:=[op(L),["prompt",1],["factor",2],["add",2],["Add",2],[":=",2],["Wertzuweisung",2], ["Aufheben einer Wertzuweisung",2],["unevaluation quotes",2],["' '",2],["expand",2], ["diff",2],["int",2],["numer",2],["denom",2],["normal",2],["subs",2],["plot3d",2], ["proc",2],["local",2]]; > L:=[op(L),["if",2],["then",2],["else",2],["fi",2],["FAIL",2],["end",2],["numpoints",2], ["orientation",2],["plot[option]",2],["animate3d",2],["infinity",3],["limit",3], ["abs",3],["exp(1)",3],["evalf",3],["Wertzuweisung ueberschreiben",3],["#",3], ["auskommentieren",3],["kernelopts(cputime)",3],["convert( ,float)",3],["Float",3]]; > nops(%); > L:=[op(L),["whattype",3],["evalhf",3],["add",3],["time( )",3],["Zeitnahme",3], ["restart",3],["assume",3],["additionally",3],["about",3],["Loeschen von properties",3], ["expression",4],["Funktion",4],["arrow operator",4],["Typ",4],["Typ-Abfrage",4], ["Typ-Test",4],["symbol",4],["function",4],["mathfunc",4],["inifunction",4], ["procedure",4]]; > nops(%); > L:=[op(L),["operator",4],["*",4],["unapply",4],["plot zwei Funktionen",4],["Menge",4], ["set",4],["{ }",4],["minus",4],["union",4],["intersect",4],["protected",4],["max",5], ["plot3d[options]",5],["plot3D structure",5],["type( ,PLOT3D)",5],["display3d",5], ["with(plots)",5],["shading=zhue",5],["style=patch",5],["style=contour",5],["evalc",5], ["normal",5],["list",5],["[ ]",5],["infinity plot",5],["invfunc",5],["atat",5], ["convert( ,ln)",5],["arccosh",5],["combine( ,ln)",5],["diff",6], ["simplify( ,power)",6],["simplify( ,assume=real)",6],["op",6],["limit[return]",6], ["$",7]]; > nops(L); > L:=[op(L),["proc end",7],["local",7],["if then fi",7],["RETURN",7],["statement",7], ["args",7],["args[1]",7],["for from to do od",7],["Programm 'poly4'",7],["factor",7], ["option remember",7],["else",7],["length",7],["printlevel",7], ["interface(verboseproc)",7],["runtime stack",7],["remember table",7], ["op(4,eval(procname))",7],["forget",7],["trace",7],["untrace",7], ["pattern binding operator",7],["::",7],["mint",7],["save",7],["read",7]]: > nops(L); > L:=[op(L),["Programm 'polyREC'",7]]:nops(L); > L:=convert(L,set):L:=convert(L,list):nops(L); ################################################################################# ################################################################################# ################################################################################# Erster Schritt: Sortieren: > E:=sort(L,F): > nops(E); Zweiter Schritt: Schreiben des Stichwortverzeichnisses: > StwVerz2(E); Schreiben von Maple-Output in ein Textfile mit dem Namen "Inhaltsverzeichis99.00" (string!): > writeto("Inhaltsverzeichis99.00"); Das File kann nun separat ausgedruckt werden. > StwVerz2(E); Zuruecksetzen des Schreibbefehls: > writeto(terminal) ; Kleiner Schoenheitsfehler: Die Zeichen [ ] und {} erscheinen nicht an der richtigen Stelle. Versuch mit anderer Ordnungsfunktion "F": Es stehen zur Verfuegung: "lexorder ", "string". Beide bewirken keine bessere Sortierung! > F2:=proc(x::list,y::list) if op(1,x) =op(1,sort([op(1,x),op(1,y)],lexorder)) then true else false fi end; > L:=[["cursor",1],["limit",2],["Limit",2],["inert maple input",3],[">",1],["[ ]",1], ["{ }",1]]: > F2(L[1],L[2]); > L[2]; > sort([op(1,L[1]),op(1,L[2])],lexorder); > E:=sort(L,F2); > F3:=proc(x::list,y::list) if op(1,x) =op(1,sort([op(1,x),op(1,y)],string)) then true else false fi end; > E:=sort(L,F3); Dies bringt keine Aenderung >