Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| cpm:mumath_einstieg [2010/09/22 13:10] – volkerp | cpm:mumath_einstieg [2013/02/04 17:47] (aktuell) – [2.6 PROPERTY-FUNKTIONEN] volkerp | ||
|---|---|---|---|
| Zeile 5: | Zeile 5: | ||
| ===== Kurz-Anleitung zum Arbeiten mit " | ===== Kurz-Anleitung zum Arbeiten mit " | ||
| - | <file - mumath.txt> | ||
| Kurz-Anleitung zum Arbeiten mit " | Kurz-Anleitung zum Arbeiten mit " | ||
| TGM_96: MUMATH.TXT, TGM_97: MUMATH.ARC | TGM_96: MUMATH.TXT, TGM_97: MUMATH.ARC | ||
| - | Dr. Fridbert Widder, #326 | ||
| - | Auf der PCC-TGM Diskette #1187 befinden sich das Programm | ||
| - | und die vier " | ||
| - | | ||
| - | | ||
| - | | ||
| - | Um algebraische Umformungen zu machen bzw., um die vier Rechentechnik- | + | **Dr. Fridbert Widder**, #326 |
| + | |||
| + | Auf der PCC-TGM Diskette #1187 befinden sich das Programm | ||
| + | und die vier " | ||
| + | |||
| + | Um algebraische Umformungen zu machen bzw. um die vier Rechentechnik- | ||
| Übungen CLES1.ALG bis CLES4.ALG zu bearbeiten, startet man am besten mit | Übungen CLES1.ALG bis CLES4.ALG zu bearbeiten, startet man am besten mit | ||
| (der DOS-Eingabe): | (der DOS-Eingabe): | ||
| - | MUSIMP ALGEBRA | ||
| - | Nach kurzer Lade-Zeit kommt die System-Meldung und das "?", | + | **MUSIMP ALGEBRA** |
| + | |||
| + | Nach kurzer Lade-Zeit kommt die System-Meldung und das "**?**", das eine | ||
| muSIMP-Eingabe erwartet. | muSIMP-Eingabe erwartet. | ||
| Zeile 26: | Zeile 25: | ||
| " | " | ||
| nicht vergessen - sonst geschieht nichts! | nicht vergessen - sonst geschieht nichts! | ||
| - | (Verlassen des Programms mit: SYSTEM();) | + | (Verlassen des Programms mit: |
| Oder/und man geht der Reihe nach die " | Oder/und man geht der Reihe nach die " | ||
| mit dem "ReaD Select" | mit dem "ReaD Select" | ||
| - | RDS(CLES1, ALG, A); | + | |
| - | gelangt man sofort " | + | **RDS(CLES1, ALG, A);** |
| + | |||
| + | gelangt man sofort " | ||
| Diskette im angegebenen Laufwerk A befindet). | Diskette im angegebenen Laufwerk A befindet). | ||
| Zeile 40: | Zeile 41: | ||
| die man am Ende der diversen " | die man am Ende der diversen " | ||
| - | (Vorher noch ein Hinweis zu den weiteren | + | (Vorher noch ein Hinweis zu den weiteren |
| - | stellten | + | |
| MATSOL.SYS | MATSOL.SYS | ||
| Programmier-Lektionen PLES1 bis PLES5 und PLES7 und PLES8.PDS. " | Programmier-Lektionen PLES1 bis PLES5 und PLES7 und PLES8.PDS. " | ||
| Zeile 50: | Zeile 50: | ||
| anschließend die Texte zu den " | anschließend die Texte zu den " | ||
| füge ich*) noch ein " | füge ich*) noch ein " | ||
| - | die Seiten-Numerierung wurde so gewählt, daß man diese Seiten als Er- | + | die Seiten-Numerierung wurde so gewählt, daß man diese Seiten als Ergänzung |
| - | gänzung | + | |
| - | *) F. Widder | + | *) F. Widder\\ |
| - | | + | Graz, 15. 9.1988 |
| - | INHALT der Zusammenfassung der Übungs- und Demonstrations-Beispiele | + | ==== INHALT der Zusammenfassung der Übungs- und Demonstrations-Beispiele " |
| - | | + | |
| Seite Inhalt: | Seite Inhalt: | ||
| 8-3 CLES1: Übungsablauf, | 8-3 CLES1: Übungsablauf, | ||
| - | | + | Formeln, Zuweisungen (von Werten an Variable) |
| 8-5 CLES2: Kontrollvariable RDS, ECHO, BELL, POINT, PBRCH, Funktion | 8-5 CLES2: Kontrollvariable RDS, ECHO, BELL, POINT, PBRCH, Funktion | ||
| - | | + | RADIX, Faktorielle, |
| 8-7 CLES3: Variable (mit bzw. ohne Wertzuweisung - der ' | 8-7 CLES3: Variable (mit bzw. ohne Wertzuweisung - der ' | ||
| - | | + | Funktionen EXPAND, EXPD, FCTR, DIVOUT, PQUOT, PREM, PGCD, |
| - | PARFRAC, NUM, DEN, COEFF, CODIV, BASE, EXPON, CONJ, RATIONALIZE, | + | PARFRAC, NUM, DEN, COEFF, CODIV, BASE, EXPON, CONJ, RATIONALIZE, |
| - | Speicherplatz-Abfrage RECLAIM(); | + | Speicherplatz-Abfrage RECLAIM(); |
| 8-9 CLES4: Aktuelle Werte von Variablen - EVAL, ESUB | 8-9 CLES4: Aktuelle Werte von Variablen - EVAL, ESUB | ||
| - | | + | Kontrollvariable (Übersicht - FLAGS();) - NUMNUM, ... DENDEN |
| 8-12 Ergänzungen, | 8-12 Ergänzungen, | ||
| Zeile 79: | Zeile 81: | ||
| 8-15 EQN.ALG: Der Gleichungs-Operator == , Umformen von Gleichungen, | 8-15 EQN.ALG: Der Gleichungs-Operator == , Umformen von Gleichungen, | ||
| - | SOLVE.EQN: Lösen mit SOLVE(Glg, Var) - vgl. S. 8-21: LINEQN.MAT | + | SOLVE.EQN: Lösen mit SOLVE(Glg, Var) - vgl. S. 8-21: LINEQN.MAT |
| 8-16 ODE.SOL: | 8-16 ODE.SOL: | ||
| + | |||
| 8-17 ODENTH.ODE: " | 8-17 ODENTH.ODE: " | ||
| + | |||
| 8-18 ODEMORE.ODE: | 8-18 ODEMORE.ODE: | ||
| 8-19 ARRAY.ARI: (Spalten- und Zeilen-)Vektoren, | 8-19 ARRAY.ARI: (Spalten- und Zeilen-)Vektoren, | ||
| + | |||
| 8-20 MATRIX.ARR: Matrix-Operationen | 8-20 MATRIX.ARR: Matrix-Operationen | ||
| + | |||
| 8-21 LINEQN.MAT: Lineare Gleichungssysteme - Matrix-Inversion | 8-21 LINEQN.MAT: Lineare Gleichungssysteme - Matrix-Inversion | ||
| - | ABSVAL.ALG: ABS als Präfix-Operator | + | ABSVAL.ALG: ABS als Präfix-Operator |
| 8-22 LOG.ALG: Logarithmus-Funktionen | 8-22 LOG.ALG: Logarithmus-Funktionen | ||
| Zeile 99: | Zeile 105: | ||
| 8-27 INT.DIF: bestimmte und unbestimmte Integrale | 8-27 INT.DIF: bestimmte und unbestimmte Integrale | ||
| - | 8-28 INTMORE.INT: | + | |
| - | | + | 8-28 INTMORE.INT: |
| + | LIM.DIF: Grenzwertbestimmung | ||
| 8-29 SIGMA.DIF: Summationen | 8-29 SIGMA.DIF: Summationen | ||
| Zeile 107: | Zeile 114: | ||
| 8-31 VECDIF.VEC: Vektor-Differential- und Integral-Operationen, | 8-31 VECDIF.VEC: Vektor-Differential- und Integral-Operationen, | ||
| - | | + | (DIV, CURL, GRAD, ...) |
| Anm.d.Red.: Den Abdruck der hier nur zusammenfassend erwähnten Übungs- und Demonstrationsbeispiele finden Sie in der Datei MUMATH.DOC. | Anm.d.Red.: Den Abdruck der hier nur zusammenfassend erwähnten Übungs- und Demonstrationsbeispiele finden Sie in der Datei MUMATH.DOC. | ||
| - | </ | ||
| ===== PROGRAMMIEREN mit muSIMP ===== | ===== PROGRAMMIEREN mit muSIMP ===== | ||
| - | <file - musimp.txt> | + | PROGRAMMIEREN mit muSIMP\\ |
| - | PROGRAMMIEREN mit muSIMP | + | TGM_96: MUSIMP.TXT, TGM_97: MUSIMP.ARC\\ |
| - | TGM_96: MUSIMP.TXT, TGM_97: MUSIMP.ARC | + | **Dr. Fridbert Widder**, #326 |
| - | Dr. Fridbert Widder, #326 | + | |
| muSIMP (und ähnliche Programm-Sprachen wie z.B. ST-MATH für den ATARI-ST) | muSIMP (und ähnliche Programm-Sprachen wie z.B. ST-MATH für den ATARI-ST) | ||
| Zeile 127: | Zeile 132: | ||
| - | | + | ==== 1.1 STRUKTUR der DATEN ==== |
| Es gibt drei elementare Grundstrukturen: | Es gibt drei elementare Grundstrukturen: | ||
| - | NAMEn | + | NAMEn\\ |
| - | INTEGERs = Zahlen | + | INTEGERs = Zahlen\\ |
| NODEs = Knoten | NODEs = Knoten | ||
| Zeile 139: | Zeile 144: | ||
| - | NAME: Ein Name besteht aus drei Zeigern - die beiden ersten Zeiger erhält | + | **NAME**: Ein Name besteht aus drei Zeigern - die beiden ersten Zeiger erhält |
| - | man durch Anwendung der Funktionen FIRST bzw. REST: | + | man durch Anwendung der Funktionen FIRST bzw. REST: |
| - | 1.Zeiger (FIRST--> | + | * 1.Zeiger (FIRST--> |
| - | | + | |
| - | 2.Zeiger (REST -->) weist auf die " | + | * 2.Zeiger (REST -->) weist auf die " |
| - | | + | |
| - | 3.Zeiger weist auf Funktions-Definition, | + | * 3.Zeiger weist auf Funktions-Definition, |
| - | | + | |
| Hinter diesen drei Zeigern steht noch die ASCII-Zeichenkette des " | Hinter diesen drei Zeigern steht noch die ASCII-Zeichenkette des " | ||
| Zeile 158: | Zeile 160: | ||
| - | INTEGER: ist aus verarbeitungs-technischen Gründen analog strukturiert: | + | **INTEGER**: ist aus verarbeitungs-technischen Gründen analog strukturiert: |
| - | 1.Zeiger --> Wert der Zahl | + | * 1.Zeiger --> Wert der Zahl |
| - | 2.Zeiger --> Vorzeichen (als " | + | |
| - | - = TRUE | + | |
| - | Daher also Vorzeichentest durch REST(zahl)& | + | |
| - | 3.Zeiger weist auf den Speicherbereich, | + | |
| - | ist. (Kein Zugriff durch den Benutzer) | + | |
| Mit den " | Mit den " | ||
| Zeile 171: | Zeile 170: | ||
| - | NODE: Ein Knoten besteht aus ZWEI ZEIGERN, die auf die Adressen beliebiger | + | **NODE**: Ein Knoten besteht aus ZWEI ZEIGERN, die auf die Adressen beliebiger |
| - | Daten-Strukturen zeigen - sowohl auf Atome, als auch wieder auf | + | Daten-Strukturen zeigen - sowohl auf Atome, als auch wieder auf |
| - | Knoten, so daß beliebig komplexe Netzwerke entstehen können. | + | Knoten, so daß beliebig komplexe Netzwerke entstehen können. |
| + | Eine einfache graphische Darstellung: | ||
| + | |||
| + | < | ||
| + | Knoten-Nummer => Zahl. | ||
| + | 1.Zeiger (FIRST) => | | ||
| + | 2.Zeiger (REST) | ||
| + | </ | ||
| - | Eine einfache graphische Darstellung: | ||
| - | | ||
| - | | ||
| Einfache Beispiele: | Einfache Beispiele: | ||
| + | < | ||
| + | |||
| 1.---31 | 1.---31 | ||
| | | | | ||
| Zeile 194: | Zeile 199: | ||
| | | ||
| | | ||
| + | </ | ||
| Die dritte Ketten-Struktur hat einen eigenen Namen - es ist eine LISTE. | Die dritte Ketten-Struktur hat einen eigenen Namen - es ist eine LISTE. | ||
| Zeile 200: | Zeile 206: | ||
| & Befehl. - Am besten dazu ein Beispiel probieren: | & Befehl. - Am besten dazu ein Beispiel probieren: | ||
| - | | + | Falls Sie nicht ohnehin muSIMP geladen haben, dazu also |
| - | MUSIMP PDS eingeben (- lädt den Progamm-Demo System-file -) | + | MUSIMP PDS eingeben (- lädt den Progamm-Demo System-file -) |
| - | | + | und beispielsweise den Unterschied zwischen den |
| - | | + | Ausgabe-Befehlen ; und & ausprobieren: |
| ? a: -5$ | ? a: -5$ | ||
| ? a; | ? a; | ||
| ? a& | ? a& | ||
| - | | + | Viele weitere Übungen zu den Grund-Strukturen sind im muMATH- |
| - | Paket PLES1.PDS enthalten - einzulesen mit RDS(PLES1, | + | Paket PLES1.PDS enthalten - einzulesen mit RDS(PLES1, |
| In der Folge beziehe ich mich auf diese erste " | In der Folge beziehe ich mich auf diese erste " | ||
| Zeile 216: | Zeile 223: | ||
| erklärt - es handelt sich um die " | erklärt - es handelt sich um die " | ||
| eingegeben wird: | eingegeben wird: | ||
| + | |||
| Beginn mit dem (= Präfix-Operator) ' | Beginn mit dem (= Präfix-Operator) ' | ||
| ein Knoten, dessen 1. bzw. 2.Zeiger auf A bzw. B weist, wird dargestellt | ein Knoten, dessen 1. bzw. 2.Zeiger auf A bzw. B weist, wird dargestellt | ||
| Zeile 230: | Zeile 238: | ||
| SECOND() = FIRST(REST()) | SECOND() = FIRST(REST()) | ||
| THIRD() = FIRST(REST(REST())) | THIRD() = FIRST(REST(REST())) | ||
| - | RREST, FFIRST, RFIRST, FFREST, RFREST, RRREST, FFFIRST, FRFIRST, RFFIRST, | + | RREST, FFIRST, RFIRST, FFREST, RFREST, RRREST, FFFIRST, FRFIRST, RFFIRST, RRFIRST. |
| - | RRFIRST. | + | |
| Zeile 241: | Zeile 248: | ||
| muSIMP-Programmieren) eignet sich gut der | muSIMP-Programmieren) eignet sich gut der | ||
| - | | + | ==== 1.2 muSIMP " |
| (Wie der Name sagt, im PDS.SYS-file integriert - beschrieben in PLES1.PDS) | (Wie der Name sagt, im PDS.SYS-file integriert - beschrieben in PLES1.PDS) | ||
| Zeile 249: | Zeile 257: | ||
| Um eine Funktion, beispielsweise eine " | Um eine Funktion, beispielsweise eine " | ||
| erzeugen, gibt man (bei geladenem PDS.SYS) ein: | erzeugen, gibt man (bei geladenem PDS.SYS) ein: | ||
| + | |||
| EDIT (' | EDIT (' | ||
| - der Schirminhalt verschwindet zugunsten des Editor-Displays: | - der Schirminhalt verschwindet zugunsten des Editor-Displays: | ||
| - | ersten Zeile steht bereits FUNCTION (), | + | ersten Zeile steht bereits FUNCTION (), und in der 2. das abschließende ENDFUN$ |
| - | und in der 2. das abschließende ENDFUN$ | + | |
| - dazwischen schreibt man seine Funktion hinein, im Beispiel etwa: | - dazwischen schreibt man seine Funktion hinein, im Beispiel etwa: | ||
| Zeile 274: | Zeile 283: | ||
| einfügen. | einfügen. | ||
| - | | + | ==== 2. GRUNDFUNKTIONEN |
| Bereits bekannt sind u.a. die Zuweisungsfunktion : | Bereits bekannt sind u.a. die Zuweisungsfunktion : | ||
| Zeile 280: | Zeile 289: | ||
| und die Terminatoren, | und die Terminatoren, | ||
| Ausgabe bewirken: | Ausgabe bewirken: | ||
| - | $ keine Ausgabe am Bildschirm | + | |
| - | | + | **$** keine Ausgabe am Bildschirm\\ |
| - | | + | **;** Ausgabe - womöglich in mathematischer Notation\\ |
| + | **&** Listen-Ausgabe | ||
| Um die Unterschiede an Beispielen zu demonstrieren, | Um die Unterschiede an Beispielen zu demonstrieren, | ||
| Namen, Zahlen und Listen definiert: | Namen, Zahlen und Listen definiert: | ||
| + | < | ||
| NAM1: MAX | NAM1: MAX | ||
| NAM2: MORITZ | NAM2: MORITZ | ||
| Zeile 299: | Zeile 310: | ||
| L4: LIST(NAM1, | L4: LIST(NAM1, | ||
| L5: LIST(10, | L5: LIST(10, | ||
| + | </ | ||
| Dabei wurde die LISTen-Erzeugungs-Funktion LIST(ob1, | Dabei wurde die LISTen-Erzeugungs-Funktion LIST(ob1, | ||
| Zeile 304: | Zeile 316: | ||
| - | 2.1 Die Terminatoren ; und & | + | ==== 2.1 Die Terminatoren ; und & ==== |
| bewirken bei Zahlen und Namen genau die gleiche Ausgabe - Unterschiede gibt | bewirken bei Zahlen und Namen genau die gleiche Ausgabe - Unterschiede gibt | ||
| es bei Listen: | es bei Listen: | ||
| - | L1& --> (1 2 3 4 5 6) | + | |
| - | L1; --> 1 (2, 3, 4, 5, 6) | + | L1; --> 1 (2, 3, 4, 5, 6) |
| ; unterteilt eine Liste in FIRST- und (REST)-Teil, | ; unterteilt eine Liste in FIRST- und (REST)-Teil, | ||
| - | | + | durch Beistriche getrennt. Ein weiterer Unterschied bei geschachtelten |
| - | telten | + | |
| - | L5& --> (10 11 (12 13) (14) 15) | + | |
| - | L5; --> 10 (11, 12(13), 14(), 15) | + | L5; --> 10 (11, 12(13), 14(), 15) |
| & zeigt Anfang und Ende jeder Ebene durch ( und ) an. | & zeigt Anfang und Ende jeder Ebene durch ( und ) an. | ||
| - | ; zeigt die REST-Listen in ( ) an -- einzelne Atome, die als Liste | + | |
| - | | + | ; zeigt die REST-Listen in ( ) an -- einzelne Atome, die als Liste eingegeben wurden, werden mit der leeren Liste () angezeigt. |
| In jedem Falle werden Listen vor der Ausgabe ausgewertet, | In jedem Falle werden Listen vor der Ausgabe ausgewertet, | ||
| - | L4; --> MAX (100, -23, 0) | + | |
| - | 2.2 Selektions- und Konstruktions-Funktionen | + | ==== 2.2 Selektions- und Konstruktions-Funktionen |
| wurden z.T. auch schon im 1.Abschnitt behandelt. So die SELEKTIONS- | wurden z.T. auch schon im 1.Abschnitt behandelt. So die SELEKTIONS- | ||
| Zeile 336: | Zeile 348: | ||
| schälen: | schälen: | ||
| - | RRREST(L2)& | + | |
| Von den KONSTRUKTIONS-Funktionen kennen wir LIST(ob1, ... obN) durch den | Von den KONSTRUKTIONS-Funktionen kennen wir LIST(ob1, ... obN) durch den | ||
| Zeile 345: | Zeile 357: | ||
| ADJOIN(ob1, | ADJOIN(ob1, | ||
| - | ADJOIN(a, | + | |
| - | ADJOIN(1, | + | ADJOIN(1, |
| - | ADJOIN(NAM1, | + | ADJOIN(NAM1, |
| Während bei Listen die REST-Zelle immer auf einen Knoten oder auf FALSE | Während bei Listen die REST-Zelle immer auf einen Knoten oder auf FALSE | ||
| Zeile 354: | Zeile 366: | ||
| Man beachte den Unterschied zwischen der Konstruktion eines Knotens mit | Man beachte den Unterschied zwischen der Konstruktion eines Knotens mit | ||
| ADJOIN bzw. durch die direkte Konstruktion mittel " | ADJOIN bzw. durch die direkte Konstruktion mittel " | ||
| - | | + | |
| + | '(a . b) & | ||
| Vergleiche dazu die " | Vergleiche dazu die " | ||
| Zeile 360: | Zeile 374: | ||
| REVERSE(liste) dreht die Reihenfolge der Listen-Elemente um: | REVERSE(liste) dreht die Reihenfolge der Listen-Elemente um: | ||
| - | REVERSE(L5)& | + | |
| REVERSE(liste1, | REVERSE(liste1, | ||
| - | REVERSE(L1, | + | |
| Wird aber statt liste1 nur ein Atom eingegeben, dann wird nur liste2 | Wird aber statt liste1 nur ein Atom eingegeben, dann wird nur liste2 | ||
| ausgegeben: | ausgegeben: | ||
| - | | ||
| - | aber bei | + | |
| + | aber bei | ||
| + | |||
| + | REVERSE(L1, | ||
| OBLIST()& | OBLIST()& | ||
| Zeile 378: | Zeile 394: | ||
| - | 2.3 ARITHMETISCHE FUNKTIONEN | + | ==== 2.3 ARITHMETISCHE FUNKTIONEN |
| Neben den Operatoren +, -, * gibt es auch Funktionen | Neben den Operatoren +, -, * gibt es auch Funktionen | ||
| Zeile 384: | Zeile 400: | ||
| Divisions-Funktionen: | Divisions-Funktionen: | ||
| - | QUOTIENT(5, | + | QUOTIENT(5, |
| QUOTIENT(-5, | QUOTIENT(-5, | ||
| - | MOD(5, | + | MOD(5, |
| MOD(-5, | MOD(-5, | ||
| Zeile 395: | Zeile 411: | ||
| - | | + | ==== 2.4 LOGISCHE FUNKTIONEN |
| NOT(obj) gibt dann und nur dann TRUE, wenn obj auf FALSE zeigt. | NOT(obj) gibt dann und nur dann TRUE, wenn obj auf FALSE zeigt. | ||
| Zeile 402: | Zeile 419: | ||
| - | 2.5 MODIFIZIERUNGS-FUNKTIONEN | + | ==== 2.5 MODIFIZIERUNGS-FUNKTIONEN |
| Sie greifen direkt auf Knoten zu und können diese (manchmal gefährlich!) | Sie greifen direkt auf Knoten zu und können diese (manchmal gefährlich!) | ||
| Zeile 408: | Zeile 426: | ||
| REPLACEF(o1, | REPLACEF(o1, | ||
| - | " | + | " |
| - | | + | Atoms ersetzt: gefährlich wäre z.B.: REPLACEF(1, |
| - | | + | " |
| - | | + | " |
| REPLACER(o1, | REPLACER(o1, | ||
| Zeile 418: | Zeile 436: | ||
| - | | + | ==== 2.6 PROPERTY-FUNKTIONEN |
| Aufbau und Verwendung von " | Aufbau und Verwendung von " | ||
| Zeile 431: | Zeile 449: | ||
| Beispiel: Erstellen einer Telefon-Liste " | Beispiel: Erstellen einer Telefon-Liste " | ||
| - | PUT(telefon, | + | |
| - | PUT(telefon, | + | PUT(telefon, |
| - | PUT(telefon, | + | PUT(telefon, |
| Zeile 440: | Zeile 458: | ||
| Die Antwort im Beispiel: | Die Antwort im Beispiel: | ||
| - | REST(telefon) ---> ((BOB . 34567) | + | REST(telefon) ---> ( (BOB . 34567) |
| Die Speicherbelegung sieht kompliziert aus: | Die Speicherbelegung sieht kompliziert aus: | ||
| - | NODE-Nummer | + | ^ NODE-Nummer |
| - | 1 | + | | 1 | Zeiger auf node2 | Zeiger auf node3 | |
| - | 2 | + | | 2 | Zeiger auf BOB | Zeiger auf 34567 | |
| - | 3 | + | | 3 | Zeiger auf node4 | Zeiger auf node5 | |
| - | 4 | + | | 4 | Zeiger auf MAX | Zeiger auf 23456 | |
| - | 5 | + | | 5 | Zeiger auf node6 | Zeiger auf node7 | |
| - | 6 | + | | 6 | Zeiger auf HANS | Zeiger auf 12345 | |
| Als Eigenschaften können selbstverständlich auch Namen und sogar Listen | Als Eigenschaften können selbstverständlich auch Namen und sogar Listen | ||
| Zeile 458: | Zeile 476: | ||
| PUT(name, indikator, property). Sollte also " | PUT(name, indikator, property). Sollte also " | ||
| bekommen haben: | bekommen haben: | ||
| + | |||
| PUT(telefon, | PUT(telefon, | ||
| Zeile 463: | Zeile 482: | ||
| ASSOC(NAM, PLIST) prüft, ob der Indikator " | ASSOC(NAM, PLIST) prüft, ob der Indikator " | ||
| - | enthalten ist; dabei muß aber die P-Liste selbst (und | + | enthalten ist; dabei muß aber die P-Liste selbst (und |
| - | nicht bloß ihr Name) als zweiter Parameter übergeben | + | nicht bloß ihr Name) als zweiter Parameter übergeben |
| - | werden. Im Beispiel: | + | werden. Im Beispiel: |
| - | ASSOC(HANS, REST(telefon)) ---> (HANS . 12345) | + | ASSOC(HANS, REST(telefon)) ---> (HANS . 12345)\\ |
| - | ASSOC(HANS, telefon) | + | ASSOC(HANS, telefon) |
| ASSOC(MITZI, | ASSOC(MITZI, | ||
| GET(name, indikator) | GET(name, indikator) | ||
| - | unter " | + | unter " |
| - | | + | Indikator zugeordnet ist; wenn keiner vorhanden: FALSE |
| - | GET(telefon, | + | GET(telefon, |
| GET(telefon, | GET(telefon, | ||
| - | | + | ==== 2.7 " |
| Wie der Name andeutet, können diese (drei) Funktionen ATOME " | Wie der Name andeutet, können diese (drei) Funktionen ATOME " | ||
| - | LENGTH(objekt) - wenn objekt ein NAME ist, ---> Anzahl der Zeichen | + | LENGTH(objekt) - wenn objekt ein NAME ist, --> Anzahl der Zeichen |
| - | | + | - wenn object = INTEGER ---> Anzahl der Ziffern (bezogen auf die geltende Basis) |
| - | auf die geltende Basis) | + | - wenn objekt = LISTE |
| - | | + | |
| - | EXPLODE(atom) | + | EXPLODE(atom) |
| - | spalten | + | |
| Umgekehrt kann man die einzelnen Bestandteile wieder zum ATOM verschmelzen | Umgekehrt kann man die einzelnen Bestandteile wieder zum ATOM verschmelzen | ||
| mit COMPRESS(liste). | mit COMPRESS(liste). | ||
| - | | + | ==== 2.8 TEST-Funktionen |
| Dienen zur Abfrage von (Eigenschaften von) Datenobjekten - als Ergebnis | Dienen zur Abfrage von (Eigenschaften von) Datenobjekten - als Ergebnis | ||
| Zeile 500: | Zeile 518: | ||
| NAME(obj) | NAME(obj) | ||
| - | | + | NAME(LISTE1) ---> FALSE, |
| - | NAME(' | + | NAME(' |
| INTEGER(obj) | INTEGER(obj) | ||
| Zeile 508: | Zeile 526: | ||
| EMPTY(obj) | EMPTY(obj) | ||
| - | | + | FALSE ist, wird als Ergebnis TRUE geliefert. EMPTY() ist |
| - | der Funktion NOT() identisch. | + | der Funktion NOT() identisch. |
| - | POSITIVE(obj) ---> TRUE, wenn " | + | POSITIVE(obj) ---> TRUE, wenn " |
| - | NEGATIVE() | + | NEGATIVE() |
| ZERO(o) | ZERO(o) | ||
| Zeile 518: | Zeile 536: | ||
| - | 2.9 VERGLEICHS-Funktionen | + | ==== 2.9 VERGLEICHS-Funktionen |
| geben (wie Testfunktionen) TRUE oder FALSE als Antwort, wenn der Vergleich | geben (wie Testfunktionen) TRUE oder FALSE als Antwort, wenn der Vergleich | ||
| stimmt oder nicht. | stimmt oder nicht. | ||
| - | GREATER(zahl1, | + | GREATER(zahl1, |
| LESSER(zahl1, | LESSER(zahl1, | ||
| Zeile 531: | Zeile 549: | ||
| objekt1 EQ objekt2 -- Der Infix-Operator " | objekt1 EQ objekt2 -- Der Infix-Operator " | ||
| - | | + | Namen, Zahlen, Listen). Beispiele: |
| - | NAM1 EQ MAX --> TRUE | + | |
| - | 100 EQ ZAHL1 -> TRUE | + | 100 EQ ZAHL1 -> TRUE |
| LIST(1,2,3) EQ LIST(1,2,3) ---> FALSE, weil bei der Auswertung dieser | LIST(1,2,3) EQ LIST(1,2,3) ---> FALSE, weil bei der Auswertung dieser | ||
| - | | + | Funktion zwei an verschiedenen Speicherplätzen stehende - |
| - | also verschiedene! - Listen erzeugt werden. Listen werden | + | also verschiedene! - Listen erzeugt werden. Listen werden |
| - | nur durch folgende Zuweisung identisch gemacht: | + | nur durch folgende Zuweisung identisch gemacht: |
| LISTE6: | LISTE6: | ||
| LISTE1 EQ LISTE6 tatsächlich TRUE. | LISTE1 EQ LISTE6 tatsächlich TRUE. | ||
| Zeile 552: | Zeile 570: | ||
| ORDERP(name1, | ORDERP(name1, | ||
| - | | + | steht. (Jeder neu eingeführte Name wird in die OBLIST() |
| - | aufgenommen und zwar in der Reihenfolge der Einführung: | + | aufgenommen und zwar in der Reihenfolge der Einführung: |
| - | früher eingeführte stehen weiter rechts in der OBLIST().) | + | früher eingeführte stehen weiter rechts in der OBLIST().) |
| - | | + | ==== 2.10 ZUWEISUNGS-Funktionen |
| Der Infix-Operator ":" | Der Infix-Operator ":" | ||
| Zeile 565: | Zeile 582: | ||
| wird dann die FIRST-Zelle des NAMEns entsprechend modifiziert. Z.B.: | wird dann die FIRST-Zelle des NAMEns entsprechend modifiziert. Z.B.: | ||
| - | ? NAME2 : SUSI & | + | |
| - | @: SUSI | + | @: SUSI |
| Nach & und " | Nach & und " | ||
| Zeile 577: | Zeile 594: | ||
| Der Prefix-Operator "'" | Der Prefix-Operator "'" | ||
| ihr Name, ihre Bezeichnung übernommen wird: | ihr Name, ihre Bezeichnung übernommen wird: | ||
| - | NAME2 ---> SUSI | + | |
| - | 'NAME2 ---> NAME2 | + | 'NAME2 ---> NAME2 |
| - | 'ZAHL1 ---> ZAHL1 | + | 'ZAHL1 ---> ZAHL1 |
| Der QUOTE-Operator ' verhindert also die Auswertung des Daten-Objektes, | Der QUOTE-Operator ' verhindert also die Auswertung des Daten-Objektes, | ||
| dem er steht. | dem er steht. | ||
| - | |||
| Etwas " | Etwas " | ||
| + | < | ||
| ? NAME2: | ? NAME2: | ||
| @: SUSI | @: SUSI | ||
| Zeile 593: | Zeile 610: | ||
| ? SUSI& | ? SUSI& | ||
| @: BLOND | @: BLOND | ||
| + | </ | ||
| und jetzt: | und jetzt: | ||
| + | < | ||
| ? ASSIGN(NAME2,'? | ? ASSIGN(NAME2,'? | ||
| @: ? | @: ? | ||
| Zeile 604: | Zeile 623: | ||
| ? SUSI& | ? SUSI& | ||
| @: ? | @: ? | ||
| + | </ | ||
| Die ASSIGN-Funktion belegt nicht wie ":" | Die ASSIGN-Funktion belegt nicht wie ":" | ||
| Zeile 610: | Zeile 630: | ||
| PUSH(objekt, | PUSH(objekt, | ||
| - | | + | als ein Stapel dient: |
| + | |||
| + | < | ||
| ? STAPEL& | ? STAPEL& | ||
| @: STAPEL | @: STAPEL | ||
| Zeile 621: | Zeile 643: | ||
| ? STAPEL& | ? STAPEL& | ||
| @: (HEIDI, . . KARIN . STAPEL) | @: (HEIDI, . . KARIN . STAPEL) | ||
| + | </ | ||
| Die " | Die " | ||
| + | < | ||
| ? POP(STAPEL)& | ? POP(STAPEL)& | ||
| @: HEIDI | @: HEIDI | ||
| Zeile 629: | Zeile 653: | ||
| ? STAPEL& | ? STAPEL& | ||
| @: ( . . KARIN . STAPEL) | @: ( . . KARIN . STAPEL) | ||
| + | </ | ||
| Eine " | Eine " | ||
| " | " | ||
| - | |||
| - | |||
| Zeile 642: | Zeile 665: | ||
| - | F.Widder, Graz, 15.10.88 | + | F.Widder, Graz, 15.10.88\\ |
| + | (F.Widder, Inst.für Theoret.Physik, | ||
| - | (F.Widder, Inst.für Theoret.Physik, | ||
| - | </ | ||