Beruflich Dokumente
Kultur Dokumente
Artikel
REXX 1
REXX: Einleitung 1
REXX: Variablen 4
REXX: Aus- und Eingabe 5
REXX: Mathematisches und logisches 7
REXX: String ist alles 8
REXX: Anweisungen, Funktionen und Operatoren 10
REXX: Schleifen 11
REXX: Bibliotheken 13
REXX: Beispiele: Primzahlen 15
REXX: Befehlsumfang 16
REXX: Aufgaben 19
REXX: Quellen 19
Referenzen
Quelle(n) und Bearbeiter des/der Artikel(s) 20
Artikellizenzen
Lizenz 21
REXX 1
REXX
• Einleitung
• Variablen
• Aus- und Eingabe
• Mathematisches und Logisches
• String ist alles
• Anweisungen, Funktionen und Operatoren
• Schleifen
• Bibliotheken
• Beispiele
• Befehlsumfang
• Aufgaben
• Quellen
REXX: Einleitung
REXX (Abk. f. Restructured Extended Executor) ist eine von Mike Cowlishaw bei IBM entwickelte Skriptsprache.
Sie sollte (durch Verwendung englischer Wörter) einfach zu lernen sein und es erlauben, möglichst einfach
Kommandos an eine oder sogar mehrere Umgebungen (z. B. bei Einsatz als Makrosprache in einem Editor, wobei
auch Kommandos an eine Systemshell abgesetzt werden) zu senden.
Grundlegende Konzepte
a = 2
a = a || '00'
say a / 2
Durch Anhängen zweier Nullen wird a mit 100 „multipliziert“; das Ergebnis, die Zeichenkette 200, kann sofort
wieder als Zahl verwendet werden. Ausgegeben wird 100.
Folgerichtig ist die Arbeit mit Strings in Rexx sehr einfach. Die obige Verkettungsoperation hätte auch
a = a'00'
geschrieben werden können. Ein oder mehrere Leerzeichen zwischen a und '00' hingegen hätten dazu geführt, dass
bei der impliziten Verkettung ein Leerzeichen eingefügt worden wäre – was sicher unerwünscht ist, wenn das
Ergebnis eine Zahl ist.
Wenn eine Zahl benötigt wird, weil der verwendete Operator mit Zahlen arbeitet, versucht Rexx, die vorliegenden
Wert als Zahl zu interpretieren:
Im Normalfall rechnet Rexx auf neun Dezimalstellen genau; durch Angabe einer höheren Anzahl kann jedoch fast
beliebig genau gerechnet werden. Es liegt nahe, dass diese wenig hardwarenahe Methode Rexx nicht unbedingt als
Sprache für sehr rechenintensive Probleme prädestiniert.
Auswertungslogik
Rexx wurde u. a. entwickelt, um auf einfache Weise Kommandos an eine Umgebung absetzen zu können. Dies wird
unterstützt durch die folgende Strategie bei der Auswertung einer Anweisung, die Rexx-Programme unempfindlich
gegenüber neu eingeführten Schlüsselwörtern macht und ein Alleinstellungsmerkmal der Sprache sind:
1. Wenn das zweite Token mit einem Gleichheitszeichen beginnt, handelt es sich um eine Wertzuweisung
Hieraus folgt, dass z. B.
if = 1
ungeachtet des Schlüsselworts if eine gültige Anweisung ist, die der Variablen IF den Wert 1 zuweist!
Hingegen wäre
if == 1
zwar ein gültiger logischer Ausdruck, der prüft, ob die Variable if exakt den Wert 1 hat; als eigenständige
Anweisung ergibt sie jedoch einen Syntaxfehler, weil der zuzuweisende Wert = 1 eben kein gültiger Ausdruck ist.
2. Ist das zweite Token ein Doppelpunkt, handelt es sich um eine Marke
Marken werden benötigt, um Prozeduren und Funktionen zu realisieren; diese notiert man in Rexx nach dem
„ausführbaren Teil“ des Programms. Beispiel:
Man könnte erwarten, dass dir x zur Standardausgabe ausgegeben wird. Das Schlüsselwort say fungiert hier jedoch
nur als Marke; der Ausdruck funk('dir x') bildet schon die nächste Anweisung. Gemäß Regel 4 (siehe unten) wird
also funk aufgerufen und dir x zur Ausführung an die Umgebung übergeben. (Es ginge natürlich auch ohne die
Funktion funk; dies nur als sehr einfaches Beispiel für einen Funktionsaufruf)
Es ist auch möglich, mit signal value Ausdruck eine bestimmte Marke anzusteuern; dies ist eher unüblich und nur in
bestimmten Fällen sinnvoll, z. B. als Alternative zu sehr großen select-Anweisungen.
3. Wenn das erste Token ein Schlüsselwort ist, erfolgt die Auswertung entsprechend dieser
Schlüsselwortanweisung
Solche Schlüsselwörter sind z. B. if, do, say. Man beachte, dass die Auswertung der Schlüsselwörter erst an dritter
Stelle günstig im Hinblick auf zukünftige Erweiterungen ist. Zukünftige Versionen der Sprache können so neue
Schlüsselwörter einführen, ohne dass existierende Programme überarbeitet werden müssen, sowohl Variablen als
auch Marken können ihren Namen behalten.
4. In jedem anderen Fall wird die Anweisung als Ausdruck ausgewertet und das Ergebnis an die Umgebung
übergeben
Dies bedeutet, dass die folgende Rexx-Anweisung (unter DOS, Windows, OS/2, …) den Inhalt des aktuellen
Verzeichnisses ausgibt:
dir
oder auch:
'dir'
REXX: Einleitung 3
Im ersten Fall ist dir eine Variable; wurde ihr kein Wert zugewiesen, so ist ihr Wert DIR (ihr Name in
Großbuchstaben), und es wird DIR an die Umgebung übergeben und ausgeführt. Im zweiten Fall wird garantiert dir
übergeben und ausgeführt.
Es könnte natürlich sein, dass eine zukünftige Rexx-Version ein Schlüsselwort dir einführt. Um sicherzugehen, dass
das Programm auch dann noch funktioniert, kann z. B. durch
''dir
erzwungen werden, dass die Anweisung als Ausdruck (Verkettung der Variablen mit dem Leerstring) erkannt wird;
oder man verwendet einfach die Variante, das Kommando als Stringkonstante zu übergeben.
Symbolnamen
Rexx unterscheidet bei syntaktischen Elementen (Schlüsselwörter und Bezeichner) nicht zwischen Groß- und
Kleinschreibung; aus Gründen der Lesbarkeit wird hier meist Kleinschreibung bevorzugt. Solange Bezeichnern kein
Wert zugewiesen wurde, haben sie als impliziten Wert ihren Namen in Großschreibung.
Bezeichner dürfen die ASCII-Buchstaben A bis Z (groß und klein), die Dezimalziffern, den Unterstrich, den Punkt,
sowie das Frage- und das Ausrufezeichen enthalten; ist das erste Zeichen eine Ziffer oder ein Punkt, handelt es sich
um eine Konstante, und eine Zuweisung würde einen Syntaxfehler erzeugen.
Strings
Strings dürfen sowohl durch Gänsefüßchen (wie in C) als auch durch Hochkommate (wie in Pascal) begrenzt
werden; das Begrenzungszeichen kann enthalten sein, wenn es gedoppelt wird. Stringliterale müssen vor dem
Zeilenende abgeschlossen, können allerdings per Fortsetzungszeichen mit dem Inhalt der nächsten Zeile verkettet
werden. Es gibt keine Variablenersetzung innerhalb von Strings und auch keine mit Backslash codierten Zeichen ('\n'
usw.).
Folgt nach dem schließenden Begrenzungszeichen der Bezeichner x, so wird der Inhalt als hexadezimaler Code
interpretiert und darf deshalb nur Hexadezimalziffern und, zur Gruppierung zwecks besserer Lesbarkeit, Leerzeichen
enthalten; entsprechend gibt es Binärstrings mit dem Suffix b.
Kommentare
Rexx unterstützt die von C bekannten, durch /* und */ begrenzten Kommentare, die Zeilenumbrüche beinhalten,
aber nicht geschachteln werden können.
REXX: Variablen 4
REXX: Variablen
Einleitung
Die Programmiersprache REXX kennt keine Typendeklaration.
Wenn eine Variable noch keinen Wert zugewiesen bekommen hat, also uninitialisiert ist, verhält sie sich wie ein in
Großbuchstaben geschriebener String:
hallo = 25
say hallo => 25
hallo = "say 5 + 3"
say hallo => say 5 + 3
Durch die Anweisung drop wird eine Variable deinitialisiert und vergessen.
Werden in REXX Variablen mit Zahlen initialisiert – oder mit Strings, die sich als Zahl interpretieren lassen –, läßt
sich mit ihnen rechnen:
a = 25
b = '17'
say a + b => 42
say a - b => 8
say a * b => 425
Stems
Stems haben in vielerlei Hinsicht Ähnlichkeiten mit Arrays:
do i = 1 to 10
zahl.i = 10 - i
end
zahl.0 = i - 1 /* => 10; per Konvention */
do i = 1 to zahl.0
say i')' zahl.i
end i
Danach existieren folgende Variablen mit folgender Zuordnung: zahl.1 = 9, zahl.2 = 8, zahl.3 = 7 ... Per
Konvention wird unter dem Index 0 die Anzahl der gespeicherten Elemente abgelegt. Mit drop zahl. können
dann alle elf Variablen der Form zahl.i mit einem Schlag entfernt werden.
REXX: Variablen 5
Nicht jeder Index muß verwendet werden; nicht zugewiesene Variablen belegen keinen Speicherplatz. Der folgende
Code erzeugt ein spärlich besetztes Array:
a = 2
do 5
b = 2*a-1
p.a = b
a = b
end
Nach dem Ablauf existieren folgende Variablen mit folgender Zuordnung: p.2 = 3, p.3 = 5, p.5 = 9, p.9 =
17, p.17 = 33.
Diese Art der Variablen wird als Stem-Variablen bezeichnet; der erste Teil einschließlich des ersten Punkts wird als
Stem bezeichnet, der Rest als Tail. Der Tail kann auch aus mehreren Symbolen bestehen, die durch Punkte
voneinander getrennt werden; auf diese Weise können auch mehrdimensionale Arrays realisiert werden. Die Werte
der verwendeten Symbole können beliebig sein; sie sind durchaus nicht auf Zahlen beschränkt.
say ausdruck
Dabei kann als Dateiname 'stderr' für die Standardfehlerausgabe und 'stdout' bzw. der Leerstring '' für
die Standardausgabe (dann entsprechend der SAY-Anweisung) angegeben werden.
Eingabe
pull variable
Strenggenommen ist pull eine Abkürzung für parse upper pull, konvertiert also die Daten in Großschreibung;
außerdem kommen die Daten aus der aktuellen Standard-Queue, sofern diese Daten enthält (was allerdings
normalerweise nicht der Fall ist).
REXX: Aus- und Eingabe 6
Wenn man sicher gehen will, dass im Eingabestrom noch Zeilen vorhanden sind, kann man die Funktion lines()
verwenden:
variable = lines(dateiname)
Der zurückgelieferte Wert gibt an, ob sich noch Zeilen im Eingabestrom befinden (0 oder 1); im Fall der aktuellen
Standardqueue ("QUEUE:"), oder wenn das Dateisystem Zeilenangaben unterstützt, kann es sich auch um die
Anzahl handeln.
Für den Fall, dass man einzelne Zeichen lesen will, gibt es die zu linein() und lines() analogen Funktionen charin()
und chars()
charin(dateiname)
variable = chars(dateiname)
/* Ein REXX-Program */
parse arg console /* übergebener Wert nun in der Variablen console */
say
anzahl = words(console)
do index = 1 to anzahl by 1
say word(console,index)
end
Der Aufruf von arg() liefert zurück, ob Argumente angegeben wurden (arg() == 1) oder nicht (arg() == 0); mit
arg(1) (anstelle von parse arg) läßt sich der Inhalt des ersten (und bei den meisten Rexx-Interpretern beim
Aufruf von der Kommandozeile einzigen möglichen) übergebenen Arguments auslesen.
REXX: Mathematisches und logisches 7
a = 2+3 ==> a == 5
• Multiplizieren:
a = 2*3 ==> a == 6
• Subtrahieren:
a = 2-3 ==> a == -1
• Division:
a = 2 / 3 ==> a == 0.66667
• Potenzieren:
Um bn zu berechnen benutzt man b**n
a = 2**3 ==> a == 8
Modulo
Man kann nicht alles so teilen, daß gebrochene Zahlen herauskommen; wenn man zum Beispiel 33 Eier auf 4
Personen aufteilen will, ohne die Eier zu zerteilen, so bleibt ein Ei übrig. Die Aufteilung ist in diesem Fall 8 Eier pro
Person, und 1 Ei, das man nicht aufteilen kann. Die Operationen heißen Div (ganzzahlige Division) und Modulo und
werden in REXX durch die Symbole % und // repräsentiert:
• Div
a = 33 % 4 ==> a == 8
• Mod
a = 33 // 4 ==> a == 1
In der Praxis benötigt man die Modulo-Operation sehr oft für Datumsberechnungen, z.B. 26.01.2006 war ein
Mittwoch. Der 27.04.2006 ist genau 90 Tage später. 90 // 7 = 6 (90:7=84 Rest 6) Daraus folgt, Mittwoch + 6 Tage =
Dienstag
Bit-Funktionen
Die folgenden drei Funktionen vergleichen die Zeichen bitweise. Ein Bit kann dabei den Zustand 0 oder 1 haben.
Jeweils 8 Bit zusammengefasst ergeben ein Zeichen. Das Zeichen "A" hat zum Beispiel den entsprechenden binären
Code 01000001 (x2b(c2x('A'))).
• bitand(a,b)
Beispiel: 01011010 und 01101101 ergeben 01001000
• bitor(a,b)
REXX: Mathematisches und logisches 8
a = bitor("Z","m") ==>
• bitxor(a,b)
Beispiel: 01011010 und 01101101 ergeben 00110111
Um diese Operationen mit dezimalen Zahlen benutzen zu können, muß man sie vorher und nachher konvertieren:
a = D2C(5)
b = D2C(9)
x = C2D(bitand(a,b)) ==> x == 1
y = C2D(bitor(a,b)) ==> y == 13
z = C2D(bitxor(a,b)) ==> z == 12
Logische Operatoren
Die logischen Operatoren AND (&), OR (|) und XOR (ausschließliches oder, &&) verlangen und liefern die exakten
Werte 0 (falsch) oder 1 (wahr). Es findet keine „Kurzschlußauswertung“ statt: enthält ein logischer Ausdruck
mehrere Funktionsaufrufe, so werden alle Aufrufe tatsächlich ausgeführt, auch wenn sich der Wert des Ausdrucks
nicht mehr ändern kann.
Konkatenation
Es kommt vor, das man zwei Strings (oder mehr) zu einem String zusammenführen möchte. So eine Verkettung
ermöglicht der Operator ||:
gesamtstring = string1||string2
a = 'Ottos'
b = 'Mops'
say a b /* 'Ottos Mops' */
Die Verkettung einer Variablen mit einem Stringliteral, oder von Literalen, die mit verschiedenen
Anführungszeichen notiert wurden, kann auch durch direktes Aneinanderschreiben geschehen:
a = 'Otto'
say a's Mops'
say 'Otto'"s Mops"
REXX: String ist alles 9
variable = length(string)
Teilstrings
Manchmal will man nur einen Teil eines Strings verwenden. Dafür kann man die Funktion substr() verwenden:
teilstring = substr(string,startposition,länge)
Wörterzerlegung
Angenommen, man will die Wörter eines als String eingegebenen Satzes analysieren. Dafür gibt es eine Anzahl von
Funktionen. Die Funktion words() gibt die Anzahl der Wörter zurück, aus denen der String zusammengesetzt ist:
variable = words(string)
variable = word(string,wert)
Sonstiges
Beispiel: a = lower("HaLlO") => a == "hallo"
Beispiel: a = upper("HaLlO") => a == "HALLO"
REXX: Anweisungen, Funktionen und Operatoren 10
Anweisungen
• drop
Mit drop variable kann man einzelne Variablen löschen, oder auch einen ganzen Stem.
• exit
Die Anweisung exit veranlaßt ein Programm sich zu beenden.
• leave
leave bewirkt das Verlassen einer Schleife. Das ist besonders sinnvoll, wenn es sich bei der Schleife um eine
Endlosschleife handelt.
• nop
Die Anweisung nop steht für no operation. Es ist eine Leeranweisung, die nichts macht.
• random(u,o,s)
Um Zufallszahlen zu bekommen, kann man die Funktion random() verwenden. random kennt die drei Parameter u
(für Untergrenze), o (für Obergrenze) und s. Alle drei Parameter sind optional, können also auch entfallen.
• C2D()
C2D() wandelt Zeichen in ASCII-Code (dezimal) um.
a = C2D("A") ==> a == 65
• C2X
C2X() wandelt Zeichen in ASCII-Code (hexadezimal) um
a = C2X("A") ==> a == 41
• D2C
D2C() wandelt Dezimalzahlen in Zeichen um
• D2X
D2X() wandelt Dezimalzahlen in Hexadezimalzahlen um a = D2X(255) ==> a == "FF"
REXX: Schleifen 11
REXX: Schleifen
Die universelle Schleife
Im Gegensatz zu anderen Programmiersprachen beginnen bei REXX alle Schleifen mit do. Die Gestaltung dieser
do-Schleife kann sehr vielfältig sein.
do
Anweisung1
Anweisung2
Anweisung3
.
.
.
AnweisungN
end
do 5
say "Hallo"
end
Zählschleife
do index=start to ende by schrittweite
say index
end
Die Zählvariable darf nach dem abschließenden end wiederholt werden; stimmt die hier angegebene Variable nicht,
so wird ein Syntaxfehler ausgelöst:
Dies ist eine gute Hilfe, um in verschachtelten Schleifen den Überblick zu bewahren.
REXX: Schleifen 12
While-Schleife
Die While-Schleife ist eine abweisende Wiederholung: Wenn der logische Ausdruck zu Beginn 0 ist, werden die
enthaltenen Anweisungen überhaupt nicht ausgeführt. (Logische Ausdrücke müssen in Rexx immer den exakten
Wert 0 oder 1 ergeben, sonst tritt ein Syntaxfehler auf.)
i=0
do while Bedingung
i=i+1
say i
end
Until-Schleife
Hier wird eine Abbruchbedingung verwendet; wenn diese 1 ergibt, wird die Ausführung der Schleife abgebrochen.
Da die Bedingung erst am Schleifenende abgefragt wird, werden die enthaltenen Anweisungen mindestens einmal
ausgeführt:
i=11
do until Bedingung
i=i-1
say i
end
Insbesondere für Endlosschleifen bietet sich auch der Abbruch per Ausnahmebehandlung an:
signal on halt
do forever
Anweisung...
end
halt:
say 'abgebrochen.'
do index=1
if index == 3 then
iterate index
if index > 5 then
leave
say index
end index
REXX: Schleifen 13
Dabei springt iterate zum Schleifenanfang (vergleichbar dem continue anderer Programmiersprachen), während
leave die Schleife verlässt (vergleichbar break). Die Angabe der Zählvariable ist wieder optional; sie ermöglicht
außerdem die Steuerung verschachtelter Schleifen. Im Beispiel wird ausgegeben:
1
2
4
REXX: Bibliotheken
Einleitung
Wie in den meisten Programmiersprachen kann man auch in REXX eigene Funktionen schreiben. Es lassen sich
auch externe Bibliotheken erstellen. Egal ob es sich um eine eigene Funktion innerhalb des Programms handelt, oder
um eine externe Bilbliothek, der Aufruf ist immer:
/* Ein Rexx-Programm */
signal on syntax
say "Bitte gib eine Zahl >= 0 ein"
pull n
do while n >= 0
say "die Fakultät zu" n "ist" fakultaet(n)
say "Bitte gib eine Zahl >= 0 ein"
pull n
end
exit 0
fakultaet: procedure
arg n
select
when n = 0 then
return 1
when n = 1 then
return 1
otherwise
return n * fakultaet(n-1)
end
syntax:
say 'Keine Zahl'
exit 1
REXX: Bibliotheken 14
Externe Bibliothek
Eine externe Bibliothek muß erst in das Programm hinzugeladen werden. Das bewirkt die Anweisung:
/* Ein REXX-Programm */
call load 'convert.r'
do forever
pull zahl
pull base
call d2n zahl,base
say zahl'='result
end
Die externe Bibliothek ist nicht ablauffähig. Um auf diesen Umstand hinzuweisen, kann man der Bibliothek zwei
Zeilen an den Anfang stellen:
Diese zwei Zeilen bewirken, das beim Starten der Bibliothek eine Meldung ausgegeben wird, daß es sich bei der
ausgeführten Datei um eine Bibliothek handelt. Das exit 1 beendet dann die Datei. Beim Aufruf mit call load aus
einem REXX-Programm haben diese beiden Zeilen keine Auswirkungen.
/* REXX-Programm */
say 'Only a Library!'
exit 1
/* */
/* */
D2N: procedure
arg n,b
/* initialisierung */
z='0123456789ABCDEFGHIJKLMNOPQRSTUVW'
conv =
nstart = n
DO WHILE n > 0
p = n // b
conv = substr(z,(p+1),1)||conv
n = n % b
END
/* Ausgabe der Konversion in der Form: 23 = (10111)2 */
return conv
REXX: Beispiele: Primzahlen 15
end
REXX: Befehlsumfang 16
REXX: Befehlsumfang
Übersicht der REXX-Anweisungen (unvollständig)
REXX-Anweisungen
address umgebung ausdruck zum Ausführen von Anweisungen außerhalb der REXX-Umgebung address CMD 'DIR
*.*'
arg Argumentstring Auswertung per Kommandozeile übergebener Argumente; Abkürzung für arg n k
parse upper arg Argumentstring
arg Argument1 [, Argument2][…] Auswertung an eine Funktion oder Prozedur übergebener Argumente; arg n, k
Abkürzung für parse upper arg Argument1[, Argument2][…]
call on bzw. off Bedingung schaltet die Überwachung der Bedingung ein oder aus (mit Rückkehr) call on error
call load 'bibliothek' Eine externe Bibliothek laden call load 'mathe.r'
interpret ausdruck ausdruck wird wie eine REXX-Anweisung behandelt interpret "a=5*(4+b)"
numeric digits / form / fuzz [Wert] Festlegungen für arithmetische Operationen numeric digits 20
procedure nur direkt nach einer mit call angesteuerten Marke zulässig (Funktions- oder
Prozeduraufruf); erzeugt einen Namespace für lokale Variablen
pull variable liest eine Zeichenkette von der aktuellen Standardqueue oder (wenn diese pull eingabe
leer ist) der Tastatur ein (Abkürzung für parse upper pull)
push ausdruck ausdruck wird der aktuellen Standardqueue übergeben, die in diesem Fall als
Stack funktioniert (LIFO)
return ausdruck kehrt zur aufrufenden Stelle zurück und übergibt ggf. den optional angegeben
Wert
say ausdruck ausdruck wird auf dem Bildschirm ausgegeben say "Hallo Welt!"
signal on bzw. off Bedingung Schaltet die Überwachung der Bedingung ein bzw. aus (ohne Rückkehr) signal on break
arg(n) gibt das n-te Argument zurück (im Falle der Kommandozeile ist n == console = arg(1)
1)
args() gibt die Anzahl der übergebenen Argumente zurück console = arg(1)
chars() gibt die Anzahl der noch verfügbaren Zeichen im Eingabestrom aus
linein("dateiname") Liest eine ganze Zeile aus einer Datei ein zeile = linein("semmel.txt")
lines() gibt die Anzahl der noch vollständigen Zeilen im Eingabestrom aus
rxqueue("Kommando"[, "Name"]) Erzeugt oder setzt eine benannte Queue bzw. fragt ihren Namen ab
Stringfunktionen
word(string,wert) gibt das n.te Wort des String aus a = word("polyglotte Katze",2) =>
Katze
words(string) gibt die Anzahl der Wörter des Strings aus a = words("Hallo Leute") => 2
mathematische Funktionen
abs(zahl) liefert den vorzeichenlosen Teil einer Zahl zurück abs(-3) => 3
random(u,o,s) liefert eine zufällige Zahl in den Grenzen von u und o zurück. u,o und s
sind optional
Vergleichsoperatoren
Rexx verfügt über zwei Klassen von Vergleichsoperatoren, die exakt (z. B. ==) oder numerisch (=) vergleichen. Im
zweiten Fall werden zunächst etwaige Rand-Blanks entfernt, weil diese für die Interpretation als Zahl nicht von
Bedeutung sind.
Rexx unterstützt eine große Zahl von Varianten, wobei allerdings „nicht“ nicht, wie in manchen Sprachen üblich,
durch das Ausrufungszeichen, sondern durch das mathematische Zeichen für „nicht“ (¬), ersatzweise den Backslash
ausgedrückt wird (das Ausrufungszeichen gehört zum Zeichenvorrat für Bezeichner!)
exakt größer oder gleich >== ¬<< \<< 30 >== "4 " 0
numerisch größer oder gleich >= ¬< \< 30 >= "4 " 1
exakt kleiner oder gleich <== ¬>> \>> 30 <<= "4 " 1
numerisch kleiner oder gleich <= ¬> \> 30 <= "4 " 0
sonstige Operatoren
Die Operatoren +, -, * und / werden nicht extra aufgeführt.
REXX-Operatoren
** Potenz 4**3 == 64
& logisches UND a & b => wahr, wenn a und b wahr sind
&& logisches XOR a && b => wahr, wenn entweder a oder b wahr ist, aber nicht beide gleichzeitig
REXX: Aufgaben
• Rao-Zahlen
Es gibt Zahlen für die gilt, daß ist. Mit ist gemeint, daß und hintereinander als
eine Zahl aufgeschrieben wird. So wird aus und die Zahl . Diesen Vorgang nennt
man Konkatenation. Ein Beispiel für eine Rao-Zahl ist 1233, da ergibt.
Schreibe in REXX ein Programm, das die Rao-Zahlen bis 1.000.000 ausgibt.
REXX: Quellen
REXX-Versionen
• BREXX - Vasilis Vlachoudis (DOS, Linux, Amiga, ...)
• Regina (Linux, Windows, ...)
• ARexx - William S. Hawes (Amiga)
Literatur
• Michael Cowlishaw, The Rexx Language: A Practical Approach to Programming, ISBN 0137806515
• Michael Metz et al., ARexx. Eine Einführung und mehr, ISBN 3930733005
• Karlheinz Wittemann, REXX unter MVS-TSO/E, ISBN 3446179569
• Howard Fosdick, Rexx Programmer's Reference (Wiley/Wrox: 2005), ISBN 0764579967
Weblinks
• The REXX Language Association [1]
• Regina [2]
• BREXX [3]
Referenzen
[1] http:/ / www. rexxla. org/
[2] http:/ / regina-rexx. sourceforge. net/
[3] ftp:/ / ftp. gwdg. de/ pub/ languages/ rexx/ brexx/
Quelle(n) und Bearbeiter des/der Artikel(s) 20
REXX: Aus- und Eingabe Quelle: http://de.wikibooks.org/w/index.php?oldid=398330 Bearbeiter: Arbol01, TobiasHerp, 1 anonyme Bearbeitungen
REXX: Mathematisches und logisches Quelle: http://de.wikibooks.org/w/index.php?oldid=458040 Bearbeiter: AlB, Arbol01, Mjchael, TobiasHerp, 4 anonyme Bearbeitungen
REXX: Anweisungen, Funktionen und Operatoren Quelle: http://de.wikibooks.org/w/index.php?oldid=459380 Bearbeiter: AlB, Arbol01, TobiasHerp, 1 anonyme Bearbeitungen
Lizenz
Creative Commons Attribution-Share Alike 3.0 Unported
http:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/