Gleichungen eben ;)
Eine Besonderheit ist, dass mit dem Definition-Operator (:=
) Ausdrücke
direkt ohne Auswertung gespeichert werden können. Diese kann man dann durch eine
spezielle Art des Funktionsaufrufs verwenden: Eckige Klammern führen eine Expression
mit neuem Kontext aus, der durch die Ausdrücke in der Klammer vorbereitet werden
kann.
Operatoren können auch durch Packages definiert werden. Eine Reihe ist jedoch immer definiert:
?
Describe. Gibt die FullForm seines Arguments aus
??
Dump. Gibt die interne Datenstruktur des unevaluierten Arguments aus.
#
Character. Ein Zeichen aus seinem ASCII-Code erzeugen
^
Power. Berechnet x^y
* / %
Multiplication, Division, Modulus
+ -
Addition, Subtraktion
=
Assignment. Weist der linken Seite den Wert der rechten Seite zu
:=
Definition. Weist der linken Seite den Ausdruck auf der rechten Seite zu
{ }
List. Erzeugt eine Liste. Identisch zu L()
@
ListAccess. Identisch zu LGet()
;
Compound. Trennt Ausdrücke, die der Reihe nach ausgeführt werden. Der Wert des
letzten Ausdrucks wird zurückgegeben. Dieser kann leer sein.
->
Function. Wird in der Definition von Funktionen verwendet, um eine automatische
Parameterzuordnung zu realisieren: f:= {a} -> a*2
.
_
Unit. Identisch zu Unit()
Unassigned
Null
Integer
Float
FloatDimension
Float
, jedoch mit physikalischer Dimension
String
RangeList
FixedList
Alles, was (syntaktisch korrekt) eingegeben werden kann wird als Ausdruck
bezeichnet. Das Umfasst sowohl mathematische Ausdrücke ("Formeln") als auch
Funktionsaufrufe, Listen etc. Um herauszufinden, wie ein Ausdruck definiert
ist kann der Describe-Operator ?
verwendet
werden. Dieser verwendet die FullForm der Ausdrücke, die den Ausdruck
als Baum der beteiligten Funktionen beschreibt.
In Π ist es möglich, Ausdrücke ohne vorherige Zuweisung an eine Variable zu verwenden. Darüber hinaus sind weitergehende Zuweisungen möglich.
Statische Zuweisungen mit =
legen den Wert der sich bei der
Auswertung des Ausdrucks auf der rechten Seite in der Variable im aktuellen
Kontext ab. Dies kann also z.B. ein Zahlenwert sein.
Diese Syntax wird außerdem von manchen Funktionen verwendet, um Konfigurationsparameter
angeben zu können und so das Verhalten der Funktionen zu beeinflussen.
Dynamische Zuweisungen mit :=
werten den Ausdruck nicht aus
sondern speichern den Ausdruck selbst. Dieser kann dann später ausgewertet
oder in weiteren dynamischen Zuweisungen verwendet werden. Das ermöglicht es,
eine Funktion zu definieren und wiederholt für verschiedene Parameter
aufzurufen.
Π unterstützt das Rechnen mit Einheiten direkt auf Ebene der algebraischen Funktionen.
Dazu kann an einen Wert über den Einheiten-Operator _
ein
Einheitenstring angehängt werden. Dabei stehen mehrere Schreibweisen zur Verfügung:
Verwendung
genau eines Bruchstrichs, Exponenten mit und ohne Potenzzeichen sowie Präfixe der
Basis 10 von yocto bis yotta.
Diese können optional mit einem Doppelpunkt abgetrennt werden. Ist eine Auflösung
nicht eindeutig möglich,
wird dieser zwingend erforderlich: nmi
=Seemeilen, aber n:mi
=Nano-Meilen
Die Grundrechenarten sowie Wurzeln und Potenzen und einige weitere Funktionen beachten
Einheiten
physikalisch korrekt. Jede andere Funktion wird einen dimensionierten Wert immer
so behandeln
wie eine einfache Zahl mit dem Anzeigewert. 1_'km/h'
wird also wie 1 behandelt,
obwohl der Grundwert in SI-Einheiten ungefähr 0.277 m/s
entsprechen würde.
Der _
-Operator ist als normaler Operator auch auf Variablen anwendbar, muss dann
allerdings mit einem Leerzeichen abgetrennt werden. So kann man z.B. einfach Umrechnungen
durchführen.
Funktionen sind in sogenannten Packages organisiert. Jedes dieser Packages stellt eine Einheit von Funktionen ähnlicher Kategorie dar.
Core
Das Package stellt System-Funktionen zur Verfügung.
Typeof(Name)
Ermittelt den Typen eines Ausdrucks
Undef(Name)
Entfernt eine Variable aus dem aktuellen Kontext
New()
New(String)
Erzeugt einen neuen (optional benannten) Kontext
Drop()
Löscht den aktuell obersten Kontext
Clear()
Leert die Ausgabe-Konsole
Pragma(name)
Gibt eine Konfigurationsvariable zurück oder Unassigned, falls diese nicht bekannt ist.
Pragma(name,value)
Setzt eine Konfigurationsvariable und gibt den neuen Wert zurück oder Unassigned, falls diese nicht bekannt ist.
Const(name)
Fragt den Wert einer Konstante ab
constinfo()
Listet verfügbare/bekannte Konstanten
constinfo(name)
Gibt Information über eine Konstante zurück
Hold(Expr)
Gibt die Expression expr unevaluiert zurück.
Eval(Expr)
Gibt die Expression expr evaluiert zurück. Gedacht zur Verwendung auf der rechten Seite von Regeln.
AbsoluteTime(Expr)
Gibt die Ausführungszeit in Sekunden sowie das Ergebnis der Auswertung von Expr zurück
MemInfo()
Gibt den aktuellen Status des Speichermanagers zurück, in der Form {allocated,reserved}
Trig
Das Package stellt trigonometrische und hyperbolische Funktionen zur Verfügung.
Sin(number)
Sinus
Cos(number)
Cosinus
Tan(number)
Tangens
ArcSin(number)
Inverse zu Sin
ArcCos(number)
Inverse zu Cos
ArcTan(number)
Inverse zu Tan
ArcTan(Y, X)
Delphi's ArcTan2: ArcTan im korrekten Quadranten
Sinh(number)
Sinus Hyperbolicus
Cosh(number)
Cosinus Hyperbolicus
Tanh(number)
Tangens Hyperbolicus
ArSinh(number)
Inverse zu SinH
ArCosh(number)
Inverse zu CosH
ArTanh(number)
Inverse zu TanH
Elementary
Das Package stellt grundlegende mathematische Funktionen zur Verfügung.
Exp(number)
Exponential
Ln(number)
Logarithmus zur Basis e (natürlicher Logarithmus)
Lg(number)
Logarithmus zur Basis 10 (dekadischer Logarithmus)
Ld(number)
Logarithmus zur Basis 2 (dualer Logarithmus)
Loga(base, number)
Logarithmus zu beliebiger Basis
Sqrt(number)
Quadratwurzel
NRt(base, number)
N-te Wurzel
Random()
Zufallszahl aus 0 <= Random < 1
Numerical
Das Package stellt Funktionen zum Umgang mit Zahlenwerten und Zahlsystemen zur Verfügung.
Abs(number)
Betrag
Sign(number)
Vorzeichen der Zahl. {-1|x<0, 0|x=0, 1|y>0}
Step(number)
Heaviside'sche Sprungfunktion mit H(0)=1
. {0|x<0, 1|y>=0}
Round(number)
Round(number, digits)
Rundet auf digits Stellen (Genauigkeit von 10
Trunc(number)
Schneidet die Nachkommastellen von number ab, es wird gegen 0 gerundet.
Floor(number)
Rundet number auf die nächstkleinere ganze Zahl ab.
Ceil(number)
Rundet number auf die nächstgrößere ganze Zahl auf.
Fac(number)
Fakultät
Binomial(n, k)
Binomialkoeffizient (
Permutations(n, k)
Anzahl der Permutationen der Länge k aus n Elementen P(n,r) = n! / (n - r)!
ItoA(number,base)
Konvertiert Ganzzahlen in String-Repräsentation in Basis
AtoI(string,base)
Konvertiert String-Repräsentation aus Basis in Zahl (nur Ganzzahlen)
b(string OR number)
Konvertiert aus/in String-Darstellung in Basis 2.
h(string OR number)
Konvertiert aus/in String-Darstellung in Basis 16.
o(string OR number)
Konvertiert aus/in String-Darstellung in Basis 8.
exthex(string OR number)
Konvertiert aus/in Speicher-Darstellung von Number (80-bit Extended) in Basis 16.
GCD(a, b)
Berechnet den größten gemeinsamen Teiler (ggT, greatest common divisor) der Ganzzahlen a und b
LCM(a, b)
Berechnet das kleinste gemeinse Vielfache (kgV, least common multiple) der Ganzzahlen a und b
Fraction(number)
Findet eine Bruchdarstellung für number und gibt diese als Liste zurück
ND(expr,var,at)
Numerische Ableitung der Funktion expr(var)
an der Stelle var=at
Lists
Das Package stellt Funktionen zur Listen-Verarbeitung zur Verfügung.
L(p1, p2, p3, ...)
Erzeugt eine neue FixedList aus den Werten der Parameter
Range(start, end, step)
Erzeugt eine RangeList mit start>=x>=end mit Schrittweite step
Merge(left, right)
Verkettet zwei Listen zu einer neuen
Splice(left, right)
Kombiniert zwei gleichlange Listen elementweise zu einer neuen zweidimensionalen Liste. Für je ein Elementpaar wird ein Tupel {l,r} ausgegeben.
Each(list, var, expr)
Führt expr in einem neuen Kontext auf jedem Element von list als Variable var aus und gibt die Ergebnisse als eine neue Liste zurück
HoldList(list)
Kopiert jedes Element von list in Ergebnis (zum Umwandeln von RangeList in FixedList)
Flatten(list)
Entpackt eine Ebene verschachtelter Listen
Aggregate(list, agg, init, var, expr)
Wendet expr auf jedes Element in list als var an. Dabei kann agg (vorbelegt mit init) modifiziert werden. Rückgabewert ist der Wert von agg nach dem letzten Durchlauf
Part(list, first, last)
Erzeugt eine List aus den Unterelementen first bis last. Der erste Eintrag hat den Index 0. Werden negative Indizes angegeben, wird von hinten gezählt, -1 bezeichnet das letzte Element, -2 das vorletzte etc.
LGet(list, item)
Gibt das Element item aus list zurück. Zählung wie bei Part.
Count(list)
Gibt die Anzahl der Elemente in list zurück.
Data
Das Package stellt Funktionen zum Arbeiten mit Dateien zur Verfügung.
Pwd()
Zeigt das aktuelle Verzeichnis an
Cwd(path)
Wechselt in path (kann auch eine relative Angabe sein)
Glob(filter)
Erstellt eine Liste aller auf die Maske filter passenden Dateien im aktuellen Verzeichnis. filter kann auch ein Unterverzeichnis oder eine Absolutangabe beschreiben.
Import(file[,options])
Importiert Daten aus einer Datei.
ImportString(string[,options])
Importiert Daten aus einem String.
Export(file, data[,options])
Exportiert Daten in eine Datei.
ExportString(data[,options])
Exportiert Daten in einen String.
CsvSave(file,list[,options])
Alias für Export(file, list, format='CSV', options)
CsvLoad(file[,options])
Alias für Import(file, format='CSV', options)
Unterstützte werden folgende Datenformate.
String
Gesamte Datei als ein String.
Text (.txt, .log)
Datei Zeilenweise.
CSV (.csv)
CSV-Datei.
Source(file)
Lädt eine Datei und führt sie Zeilenweise aus. Tritt ein Fehler auf, wird die Ausführung beendet. Die Dateiendung .pi wird automatisch ergänzt, falls file nicht gefunden wird.
Table(list)
Stellt eine Liste (oder Liste von Listen) als Tabelle dar, gibt die Anzahl der Zeilen zurück.
HexDump(string)
Produziert einen Hexdump aus einem String, gibt den String zurück.
Bucket(list, min, max, count)
Zählt alle Werte in min < x < max in count Gruppen. Rückgabe: Liste von {Mittelwert, Anzahl}
Max(list)
Größter Wert einer Liste
Min(list)
Kleinster Wert einer Liste
SortBy(list, var, expr)
Sortiert list unter verwendung der Schlüssel, wie sie expr generiert.
NumDerive(list)
Numerische Ableitung einer Liste von {X,Y}-Punkten. In der Mitte zwischen zwei X-Werten wird die Differenz nach dY/dY abgelegt. Die erzeugte Liste ist ein Element kürzer.
Smooth(list)
Glätten einer Liste von {X,Y}-Punkten.
String
Das Package stellt Funktionen zur Verarbeitung von Strings zur Verfügung.
Insert(string, substr, index)
Fügt den Teilstring substr an Index index ein.
Delete(string, index)
Delete(string, index, count)
Löscht eins oder mehrere Zeichen string.
Substr(string, index, count)
Kopiert count Zeichen ab index aus string.
Split(string, delimiter)
Trennt den string am Trennzeichen delimiter und gibt eine String-Liste zurück. Wenn delimiter der Leerstring ist, wird nach jedem Zeichen getrennt.
Join(strings, delimiter)
Kombiniert die Liste strings mit dem Trennzeichen delimiter zu einem String.
Statistics
Das Package stellt Funktionen zu Statistischen Verteilungen zur Verfügung.
Erf(x)
Gauß'sche Fehlerfunktion
ErfC(x)
Komplementäre Gauß'sche Fehlerfunktion (ErfC(x) = 1 - Erf(x))
NormPDF(x, mu, sigma)
Wahrscheinlichkeitsdichte der Normalverteilung mit dem Erwartungswert mu und der Standardabweichung sigma.
StdNormPDF(x)
Wahrscheinlichkeitsdichte der Standardnormalverteilung.
StdNormCDF(x)
Verteilungsfunktion der Standardnormalverteilung.
InvStdNormCDF(x)
Inverse der Verteilungsfunktion der Standardnormalverteilung.
StdNormRand()
Liefert einen standardnormalverteilten Zufallswert.
Graph
Das Package stellt Funktionen zum Erstellen und Anzeigen von Diagrammen und Plots
zur Verfügung.
Alle range-Angaben sind Listen der 2 Grenzen: range={min, max}
Alle Funktionen, die Plot-Objekte erstellen backen den aktuellen Kontext zum Zeitpunkt
ihrer
Ausführung. Spätere Änderungen werden nicht übernommen. Das kann man verwenden,
um Funktionsscharen
zu plotten
Plot(expr,var,range[,options])
Plottet eine Expression in Variable var über range
Histogram(list[,options])
Plottet eine Liste von {Mittelwert,Anzahl}-Tupeln
XYPlot(list[,options])
Plottet eine Liste von {X,Y}-Punkten
Show(plots[,options])
Stellt mehrere Plot-Objekte dar. plots muss eine Liste von Plot-Objekten oder ein Plot-Objekt sein.
Eine Legende mit der Zuordnung der Farben wird bei gedrückter Maustaste angezeigt.
Symbolics
Das Package implementiert Funktionen zur symbolischen Manipulation von Ausdrücken. Achtung: Experimentell!
Clone(expr)
Erstellt eine unabhängig veränderbare Kopie des Ausdrucksbaums von expr
Subs(expr, {rules})
Wendet alle Zuweisungen in rules permanent auf expr an und gibt den neuen Ausdruck zurück.
Pattern(expr, {variables})
Erzeugt ein Muster, welches auf Ausdrücke passt die wie expr mit den freien Variablen variables aussehen.
Rule(expr, {variables}, target)
Erzeugt eine Regel, welche Ausdrücke die wie expr mit den freien Variablen variables aussehen in target transformieren kann.
Match(expr, pattern)
Prüft ob pattern auf expr zutrifft und gibt eine Liste der möglichen Variablenzuordnungen oder NULL zurück.
Replace(expr, {patterns})
Replace(expr, patterns)
Wendet die erste passende Regel aus patterns auf die oberste Ebene von expr an und gibt das Ergebnis oder den unveränderten Ausdruck zurück.
ReplaceAll(expr, {patterns})
ReplaceAll(expr, patterns)
Wendet die erste passende Regel aus patterns auf jeder Ebene von expr rekursiv an.
Diff(expr, var)
Differenziert expr symbolisch nach var.
Dimensions
Das Package bietet Funktionen zum erzeugen von Einheiten, mit denen dann gerechnet
werden kann.
Es existiert eine Bibliothek von vordefinierten Einheiten, die mit SI-Prefixen verbunden
werden können.
Dabei kann sowohl die "natürliche" Syntax ls auch die getrennte Syntax verwendet
werden (km = k:m = m * 1E3
).
Ist eine Prefix/Einheit-Kombination nicht eindeutig, muss die getrennte Syntax angewendet
werden.
Unit(val, unit)
Bildet aus einem Zahlenwert und einer String-Repräsentation der Einheit einen dimensionierten Wert. Ist val bereits ein dimensionierter Wert, verhält sich Unit wie Convert.
Convert(val, unit)
Konvertiert einen dimensionierten Wert in eine andere Einheit der gleichen Dimension.
Express(val, unit)
Express(val, {unit, unit...})
Stellt einen Wert in einer minimalen Kombination von Einheiten dar. Dabei können bestimmte Einheiten als "zu verwenden" vorgegeben werden. Dimensionsfremde Vorgaben werden u.U. ignoriert.
This license applies to everything in this package, except where otherwise noted. Parts taken from other authors may be subject to their own licenses. This project is available under a dual-license model, applying either (1) or (2): 1. Non-Commercial and Evaluation Use: This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this package, You can obtain one at http://mozilla.org/MPL/2.0/ If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Commercial Use: A special permission is required, please contact us for details.