Muster - dialogos-project/dialogos GitHub Wiki
Muster haben in DialogOS zweierlei Funktion: Sie dienen auf der einen Seite als Kontrollstruktur, da durch sie entschieden werden kann, wie ein Dialog verläuft, auf der anderen Seite können sie einzelne Informationen einer Eingabe in Variablen speichern, um so im späteren Dialogverlauf weiterhin Zugriff auf die Information zu haben.
Es gibt verschiedene Varianten von Mustern, die man in Eingabeknoten verwendet. Generell wird ein Dialog an dem jeweils entsprechenden Ausgang fortgesetzt, sobald der Wert einer Eingabe auf ein Muster passt. Die Muster werden dabei von oben nach unten überprüft. Die folgende Liste soll einen Überblick über Mustervarianten und deren Vor- und Nachteile geben:
-
Wildcard _: Das Muster _ wird in der Regel am Ende der Liste von Eingabemustern verwendet, da es zu jeder Eingabe passt. Es speichert keinerlei Informationen, sondern setzt den Dialogverlauf entlang des entsprechenden Ausgangs fort.
-
Werte: Es ist möglich, Zeichenketten, Zahlen- und Wahrheitswerte als Muster zu nehmen. Diese passen genau dann auf eine Eingabe, wenn die Eingabe den gleichen Wert hat. Es wird dann keine Information gespeichert und der Dialog am entsprechenden Ausgang fortgesetzt. Beispiele:
1
,3.141
,"Autobahn"
,true
-
Variablen: Benutzt man Variablen als Muster, so wird der Wert der Eingabe in die Variable geschrieben und der Dialog wird am entsprechenden Ausgang fortgesetzt. Man sollte allerdings der verwendete Datentyp der Variable beachtet werden.
-
Listen: Listen funktionieren als Muster genauso wie Werte. Es gibt allerdings zusätzlich die Möglichkeit, ein Listenmuster mit dem Operator
::
darzustellen, wenn nur die Anzahl der Elemente oder der Wert bestimmter Elemente von Bedeutung ist. Beispielsweise passt\_::\_::[]
auf alle Listen mit genau zwei Elementen, während\_::\_::\_
auf alle Listen mit mindestens zwei Elementen passt. -
Strukturen: Strukturen funktionieren ebenfalls genauso wie Werte. Allerdings passt eine Struktur auf alle Eingabe-Strukturen, die mindestens die gleiche Menge von Informationen beinhalten. Es ist daher sinnvoll, Strukturen mit mehr Informationen weiter oben in die Liste von Mustern zu schreiben, da Eingaben sonst vorher bereits auf eine Struktur mit weniger Informationen passen könnten. Beispielsweise passt das Muster
{ help=\_ }
auf{ help="control" }
wie auch auf{ help="control", route="Autobahn" }
. -
Variablen mit Werten (Variable as Wert): Es ist möglich, sowohl eine Variable als auch einen Wert (bzw. eine Liste oder Struktur) als Muster anzugeben. Der Wert der Eingabe wird nun, wenn er auf das Muster passt, in die angegebene Variable geschrieben und dann erst der Dialog am entsprechenden Ausgang fortgeführt. Beispielsweise speichert
chosen as { help=\_ }
eine eingegebene Struktur, die ein Element mit dem Namen help hat in die Variable chosen und setzt anschließend den Dialog am entsprechenden Ausgang fort. -
Reguläre Ausdrücke (/regexp/ = (Variablen)): Ist die Eingabe eine Zeichenkette, so ist es möglich, einen regulären Ausdruck auf die Eingabe anzuwenden und die gefundenen Daten anschließend in Variablen zu speichern. Beispielsweise speichert der reguläre Ausdruck
/Ich möchte ein Lied von (.\*)/=(artist)
den Namen eines Künstlers in die Variableartist
. Dies funktioniert auch mit mehreren Variablen, beispielsweise speichert/Ich möchte (.\*) von (.\*)/=(song,artist)
den Inhalt des ersten Platzhalters in die Variablesong
und den des zweiten Platzhalters in die zweite Variable, alsoartist
.
Nächste Seite: Funktionen und Skripte