Prog
,
Check
,
Prefix
,
Postfix
,
Bodied
,
Infix
,
IsInfix
,
IsPrefix
,
IsPostfix
,
OpPrecedence
,
RightAssociative
,
LeftPrecedence
,
RightPrecedence
,
RuleBase
,
Rule
,
HoldArg
,
Retract
,
UnFence
,
MacroSet
,
MacroClear
,
MacroLocal
,
MacroRuleBase
,
MacroRule
,
Secure
.
Programmierung
/* comment */
Ein Kommentar in einem Quelltext.
Prog(...)
Die Funktion wertet die Argumente der Reihe nach aus. Das letzte Ergebnis wird
zurückgegeben. Alternativ können die Argumente auch einfach in eckige Klammern
gesetzt werden:
"Prog(a,b);" ist äquivalent zu "[a;b;];".
Check(predicate,"error")
Die boolsche Funktion "predicate" wird ausgewertet. Ist das Ergebnis False,
wird das Programm an dieser Stelle abgebrochen und auf der Kommandozeile "error"
ausgegeben.
Prefix("operator")
Mit dieser Funktion wird ein neuer "prefix"-Operator definiert. "prefix"-Operatoren
stehen links vom Argument. Die Funktion kann auch mit einem zusätzlichen Argument
für den Rang des Operators aufgerufen werden.
Postfix("operator")
Mit dieser Funktion wird ein neuer "postfix"-Operator definiert. "postfix"-Operatoren
stehen rechts vom Argument.
Bodied("operator", precedence)
Mit dieser Funktion wird ein neuer "bodied"-Operator definiert.
Infix("operator", precedence)
Mit dieser Funktion wird ein neuer "infix"-Operator definiert. "infix"-Operatoren
stehen zwischen zwei Argumenten. Der Rang des Operators wird mit "precedence"
festgelegt.
IsInfix("str"), IsPrefix("str"), IsPostfix("str")
Die Funktionen testen, ob "str" ein "infix"-, "prefix"-, oder "postfix"-Operator ist.
Das Ergebnis von z.B. IsInfix("+") ist True.
OpPrecedence("str")
Als Ergebnis wird der Rang des "infix"-Operators "str" zurückgegeben.
RightAssociative("operator")
Die Funktion macht den Operator "operator" rechts-assoziativ. Beispielsweise
wird die Multiplikation durch RightAssociative("*") rechts-assoziativ.
Die Funktion sollte überlegt eingesetzt werden, da es eine entsprechende Funktion
für links-Assoziativität nicht gibt.
LeftPrecedence("operator", precedence), RightPrecedence("operator", precedence)
Mit dieser Funktion wird der Parser angewiesen, den links bzw. rechts vom
"infix"-Operator "operator" stehenden Ausdruck in Klammern zu setzen, wenn der Rang
größer als "precedence" ist.
Diese Funktion ist z.B. notwendig, um a-(b-c) richtig auszuwerten. Die Ausdrücke
a+b+c und a+(b+c) sind äquivalent, nicht jedoch a-b-c und a-(b-c).
RuleBase("operator", {params})
Mit dieser Funktion wird ein neuer Eintrag in der Regeltabelle erzeugt.
Rule("operator", arity, precedence, predicate) body
Mit dieser Funktion wird eine Regel für die Funktion "operator" definiert. Der Rang
wird mit "precedence" festgelegt, "arity" ist die Anzahl der Argumente. Für Funktionen
gleichen Namens lassen sich verschiedene Regeln definieren, wenn sich die Funktionen
in der Anzahl der Parameter unterscheiden. Regeln mit niedrigem Rang werden vor
Regeln mit hohem Rang angewendet.
HoldArg("operator", parameter)
Diese Funktion verhindert sofortige die Berechnung des Parameters "parameter" in
dem Ausdruck "operator". Der Parameter wird erst berechnet, wenn er tatsächlich
gebraucht wird.
Retract("operator", arity)
Diese Funktion entfernt die spezifizierte Regel.
UnFence("operator", arity)
Diese Funktion wird auf eine benutzerdefinierte Funktion "operator" angewendet. Sie
ermöglicht den Zugriff auf die lokalen Variablen der aufrufenden Funktion. Die
Funktionen For und ForEach nutzen diese Eigenschaft.
MacroSet, MacroClear, MacroLocal, MacroRuleBase, MacroRule
Diese Funktionen entsprechen den oben beschriebenen nicht-Makro-Funktionen, mit der
Ausnahme, dass die Argumente vor der Ausführung berechnet werden.
Secure(body)
Die Anweisung "body" wird in einer sicheren Umgebung ausgeführt, in der
Dateizugriffe und Aufrufe von Systemfunktionen nicht erlaubt sind. Unbekannte Skripte
(z.B. aus dem Internet) können so sicher ausgeführt werden.