Bearbeiten von „ShakespeareForInfos

Aus KIF
Warnung: Du bist nicht angemeldet. Deine IP-Adresse wird bei Bearbeitungen öffentlich sichtbar. Melde dich an oder erstelle ein Benutzerkonto, damit Bearbeitungen deinem Benutzernamen zugeordnet werden. Ein eigenes Benutzerkonto hat eine ganze Reihe von Vorteilen.

Die Bearbeitung kann rückgängig gemacht werden. Bitte prüfe den Vergleich unten, um sicherzustellen, dass du dies tun möchtest, und veröffentliche dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.

Aktuelle Version Dein Text
Zeile 20: Zeile 20:
Gleiches gilt für das Verlassen der Bühne mit <tt>[Exit Hamlet]</tt> bzw. beim Verlassen von mehreren Personen gleichzeitig durch <tt>[Exeunt Hamlet and Romeo]</tt>.
Gleiches gilt für das Verlassen der Bühne mit <tt>[Exit Hamlet]</tt> bzw. beim Verlassen von mehreren Personen gleichzeitig durch <tt>[Exeunt Hamlet and Romeo]</tt>.


=== Dramatis personae ===
 
Romeo, a young man with a remarkable patience.
\begin{lstlisting}[caption={Dramatis personae}, label = Shakespeare1]
Juliet, a likewise young woman of remarkable grace.
Romeo, a young man with a remarkable patience.
Ophelia, a remarkable woman much in dispute with Hamlet.
Juliet, a likewise young woman of remarkable grace.
Hamlet, the flatterer of Andersen Insulting A/S.
Ophelia, a remarkable woman much in dispute with Hamlet.
Hamlet, the flatterer of Andersen Insulting A/S.
\end{lstlisting} % aus dem Hello-World Programm
 


==Scene I: The insulting of Romeo.==
==Scene I: The insulting of Romeo.==


Jeder SPL Code ist aufgeteilt in einzelne Akte (z.B. <tt>Act I: Hamlet's insults and flattery.</tt>), welche wiederum in Szenen (z.B. {\tt Scene I: The insulting of Romeo.}) aufgeteilt sind. Dadurch ist es innerhalb des Programms möglich mit Aussprüchen wie <tt>If so, we must proceed to Scene V.</tt> (analog zu GoTo Befehlen in C oder Assembler) im Programmcode zu springen.
Jeder SPL Code ist aufgeteilt in einzelne Akte (z.B. {\tt Act I: Hamlet's insults and flattery.}), welche wiederum in Szenen (z.B. {\tt Scene I: The insulting of Romeo.}) aufgeteilt sind. Dadurch ist es innerhalb des Programms m"oglich mit Ausspr"uchen wie {\tt If so, we must proceed to Scene V.} (analog zu GoTo Befehlen in C oder Assembler) im Programmcode zu springen.


Beschreibungen der Szene oder des Aktes, die nach dem Doppelpunkt vorgenommen werden, sind übrigens als Kommentar zu sehen und werden daher vom Compiler ignoriert.
Beschreibungen der Szene oder des Aktes, die nach dem Doppelpunkt vorgenommen werden, sind "ubrigens als Kommentar zu sehen und werden daher vom Compiler ignoriert.


==You lying stupid fatherless big smelly half-witted coward!==
\titel{You lying stupid fatherless big smelly half-witted coward!}


Dieser Satz ist, so merkwürdig es auch klingt, eine Variablendeklaration und weist der angesprochenen Variable den Wert <tt>-64</tt> zu. Aber dröseln wir den Satz doch Stück für Stück ein wenig auf...
Dieser Satz ist, so merkw"urdig es auch klingt, eine Variablendeklaration und weist der angesprochenen Variable den Wert $-64$ zu. Aber dr"oseln wir den Satz doch St"uck f"ur St"uck ein wenig auf \dots


== Zahlen ==
\titel{Zahlen}
Jedes Substantiv ist eine Konstante mit dem Wert ''1'' oder ''-1''. Der Wert hängt davon ab, ob diese Zahl "schön" ist oder nicht. So haben bspw. die Wörter ''flower'' oder ''hero'' den Wert ''1'' aber ''coward'' oder ''pig'' den Wert <tt>-1</tt>. Neutrale Substantive wie ''tree'' oder ''stone'' zählen ebenfalls ''1''.
Jedes Substantiv ist eine Konstante mit dem Wert $1$ oder $-1$. Der Wert h"angt davon ab, ob diese Zahl \glqq{sch"on\grqq} ist oder nicht. So haben bspw. die W"orter \emph{flower} oder \emph{hero} den Wert $1$ aber \emph{coward} oder \emph{pig} den Wert $-1$. Neutrale Substantive wie \emph{tree} oder \emph{stone} z"ahlen ebenfalls $1$.


Durch jedes vorangestellte Adjektiv erhöht sich dieser Wert nun um den Faktor zwei. Somit wäre eine <tt>lovely red rose</tt> der Wert <math>2\cdot 2\cdot 1 = 4</math> oder ein <tt>snotty stinking half-witted hog</tt> gerade <math>2\cdot 2\cdot 2 \cdot (-1)=-8</math>.
Durch jedes vorangestellte Adjektiv erh"oht sich dieser Wert nun um den Faktor zwei. Somit w"are eine {\tt lovely red rose} der Wert $2\cdot 2\cdot 1 = 4$ oder ein {\tt snotty stinking half-witted hog} gerade $2\cdot 2\cdot 2 \cdot (-1)=-8$.


== Zuweisungen ==
\titel{Zuweisungen}
Solche Konstanten können nun den einzelnen Variablen zugewiesen werden. Zuweisungen werden durch einzelne Personalpronomen wie <tt>You</tt> oder <tt>Thou</tt> eingeleitet, die zeigen, welcher Charakter angesprochen wird.  
Solche Konstanten k"onnen nun den einzelnen Variablen zugewiesen werden. Zuweisungen werden durch einzelne Personalpronomen wie {\tt You} oder {\tt Thou} eingeleitet, die zeigen, welcher Charakter angesprochen wird.  


Wenn also Hamlet zu Romeo spricht, <tt>You are as stupid as the difference between a handsome rich brave hero and thyself!</tt> wird Romeo der Wert <tt>8</tt> minus dem aktuellen Wert von Romeo zugewiesen. - Ganz wie man es von diesem englischen Satz erwarten würde. - Das <tt>as [...] as</tt> kann übrigens durch einen (fast) beliebigen Ausdruck ersetzt werden, der eine Gleichheit ausdrückt.
Wenn also Hamlet zu Romeo spricht, {\tt You are as stupid as the difference between a handsome rich brave hero and thyself!} wird Romeo der Wert $8$ minus dem aktuellen Wert von Romeo zugewiesen. --- Ganz wie man es von diesem englischen Satz erwarten w"urde. --- Das {\tt as [\dots] as} kann "ubrigens durch einen (fast) beliebigen Ausdruck ersetzt werden, der eine Gleichheit ausdr"uckt.


== I/O ==
\titel{I/O}
Die Eingabe sowie die Ausgabe funktionieren denkbar einfach. So würde ein angesprochener Charakter bei dem Satz <tt>Open your heart.</tt> eine Zahl und bei <tt>Speak your mind.</tt> ein Literal ausgeben. Das Literal orientiert sich dabei am aktuell verwendeten Rechner-Zeichensatz (z.B. im ASCII-Code trägt das Zeichen ''A'' den Wert 65).
Die Eingabe sowie die Ausgabe funktionieren denkbar einfach. So w"urde ein angesprochener Charakter bei dem Satz {\tt Open your heart.} eine Zahl und bei {\tt Speak your mind.} ein Literal ausgeben. Das Literal orientiert sich dabei am aktuell verwendeten Rechner-Zeichensatz (z.B. im ASCII-Code tr"agt das Zeichen \emph{A} den Wert 65).


Die Eingabe erfolgt analog. Durch <tt>Listen to your heart.</tt> wird eine Zahl und durch <tt>Open your mind.</tt> ein Literal eingelesen und in der angesprochenen Variable gespeichert.
Die Eingabe erfolgt analog. Durch {\tt Listen to your heart.} wird eine Zahl und durch {\tt Open your mind.} ein Literal eingelesen und in der angesprochenen Variable gespeichert.


== Am I better than you? ==
\titel{Am I better than you?}


Im richtigen Leben meistens eine Fangfrage, hier ein simpler Wertevergleich. Durch dieses Statement können zwei Variablen miteinander verglichen werden. Das folgende Beispiel sollte f"ur jeden Informatiker fast selbsterklärend sein:
Im richtigen Leben meistens eine Fangfrage, hier ein simpler Wertevergleich. Durch dieses Statement k"onnen zwei Variablen miteinander verglichen werden. Das folgende Beispiel sollte f"ur jeden Informatiker fast selbsterkl"arend sein:


=== Vergleichen ===
\begin{lstlisting}[caption={Vergleichen}, label = Shakespeare2]
<pre>
Juliet:
Juliet:
  Am I better than you?
  Am I better than you?
Zeile 63: Zeile 65:
  If so, let us proceed to
  If so, let us proceed to
  scene III.
  scene III.
</pre>
\end{lstlisting}
 


Was hier steht, kann einfach in eine bedingte Sprunganweisung nach Szene III übersetzt werden, die genau dann eintritt, wenn der Wert von <tt>Juliet</tt> größer als der Wert von <tt>Hamlet</tt> ist.
Was hier steht, kann einfach in eine bedingte Sprunganweisung nach Szene III "ubersetzt werden, die genau dann eintritt, wenn der Wert von {\tt Juliet} gr"o"ser als der Wert von {\tt Hamlet} ist.


Analog existieren auch die Vergleiche mit  <tt>Is ''X'' as good as ''Y''?</tt> und <tt>Is ''X'' better than ''Y''?</tt>. Auch diese Ergebnisse können mit <tt>If so,...</tt> und <tt>If not,...</tt> angefragt werden. Negative Vergleiche können logischer Weise mit ''bad'' und ''worse'' gemacht werden. Das Negieren gelingt durch Einfügen von ''not''.
Analog existieren auch die Vergleiche mit  {\tt Is \emph{X} as good as \emph{Y}?} und {\tt Is \emph{X} better than \emph{Y}?}. Auch diese Ergebnisse k"onnen mit {\tt If so, \dots} und {\tt If not, \dots} angefragt werden. Negative Vergleiche k"onnen logischer Weise mit \emph{bad} und \emph{worse} gemacht werden. Das Negieren gelingt durch Einf"ugen von \emph{not}.


== Remember me. ==
\titel{Remember me.}
Als kleinen Leckerbissen haben die Entwickler auch eine Stack-Funktion eingebaut. Zu beachten ist hierbei, dass anders als z.B. in Assembler nicht ein gemeinsamer Stack existiert, sondern jeder Charakter sein eigenes kleines Gedächtnis, also seinen eigenen Stack besitzt. Die Push-Operation erfolgt durch ein <tt>Remember me.</tt>:
Als kleinen Leckerbissen haben die Entwickler auch eine Stack-Funktion eingebaut. Zu beachten ist hierbei, dass anders als z.B. in Assembler nicht ein gemeinsamer Stack existiert, sondern jeder Charakter sein eigenes kleines Ged"achtnis, also seinen eigenen Stack besitzt. Die Push-Operation erfolgt durch ein {\tt Remember me.}:


===Push-Operation===
\begin{lstlisting}[caption={Push-Operation}, label = Shakespeare3]
<pre>
Lady Macbeth:
Lady Macbeth:
  Remember me.
  Remember me.
</pre>
\end{lstlisting}


Hierdurch wird der Angesprochene veranlasst den Wert von ''Lady Macbeth'' auf seinen Stack zu legen.
Hierdurch wird der Angesprochene veranlasst den Wert von \emph{Lady Macbeth} auf seinen Stack zu legen.


Ein Pop wird durch das Auftauchen des Befehls <tt>recall</tt> ausgeführt:
Ein Pop wird durch das Auftauchen des Befehls {\tt recall} ausgef"uhrt:


===Pop-Operation===
\begin{lstlisting}[caption={Pop-Operation}, label = Shakespeare4]
<pre>
Lady Macbeth:
Lady Macbeth:
  Recall your imminent death!
  Recall your imminent death!
</pre>
\end{lstlisting}
 


Hierbei nimmt wieder der Angesprochene den obersten Wert von seinem Stack.
Hierbei nimmt wieder der Angesprochene den obersten Wert von seinem Stack.


== Use It! ==
\titel{Use It!}


Das war nun eine kleine Einführung in SPL, aber wie jede Programmiersprache muss man sie selber erleben! Das Handbuch und den Übersetzer findet ihr unter [http://shakespearelang.sourceforge.net/ http://shakespearelang.sourceforge.net/].
Das war nun eine kleine Einf"uhrung in SPL, aber wie jede Programmiersprache muss man sie selber erleben! Das Handbuch und den "Ubersetzer findet ihr unter \url{http://shakespearelang.sourceforge.net/}.


Vielleicht ist das nun der Start einer wunderbaren Karriere als Buchautor, Dramatiker oder Poet? In jedem Fall ist diese Programmiersprache aber ein wunderbares Beispiel was zwei Informatikstudenten (in diesem Fall Karl Hasselström and Jon &Aring;slund, damals an der Universität Stockholm) mit ein wenig Freizeit und einer recht weit gefassten Projektaufgabe doch fantastisches bewerkstelligen können.
Vielleicht ist das nun der Start einer wunderbaren Karriere als Buchautor, Dramatiker oder Poet? In jedem Fall ist diese Programmiersprache aber ein wunderbares Beispiel was zwei Informatikstudenten (in diesem Fall Karl Hasselstr"om and Jon {\AA}slund, damals an der Universit"at Stockholm) mit ein wenig Freizeit und einer recht weit gefassten Projektaufgabe doch fantastisches bewerkstelligen k"onnen.


== Hello World ==
\titel{Hello World}
Um einen Geschmack zu bekommen, wie dann ein fertiges Programm aussieht, findet ihr hier den Programmcode des Hello World Programmes. Aus Platzgründen jedoch ein wenig gekürzt, sodass nur das Wort <tt>Hello</tt> ausgegeben wird.
Um einen Geschmack zu bekommen, wie dann ein fertiges Programm aussieht, findet ihr hier den Programmcode des Hello World Programmes. Aus Platzgr"unden jedoch ein wenig gek"urzt, sodass nur das Wort {\tt Hello} ausgegeben wird.
\end{zweispaltig}
\autor{CoLa}
\begin{figure*}[!b]
\begin{center}
\includegraphics[width=15cm]{comics/shakespear}\\
\end{center}
\end{figure*}
\pagebreak


== The Infamous Hello World Program. ==
\titel{The Infamous Hello World Program.}
<pre>
\begin{lstlisting}[caption={The Infamous Hello World Program.}, label = Shakespeare5]
The Infamous Hello World Program.
The Infamous Hello World Program.


Zeile 146: Zeile 156:
[...]
[...]
\end{lstlisting}
\end{lstlisting}
</pre>
= Veröffentlichung =
* Artikel wurde geschrieben von: Andreas Cord-Landwehr
* Uni: Universität Paderborn
* Zeitschrift: \matik 58 - Wintersemester 2006/07
* Kontakt: phoenixx@upb.de
* Nachdruck im Inforz vom Juni 2007. Online unter http://www.fachschaft.informatik.tu-darmstadt.de/inforz/ verfügbar.
[[Kategorie:Freizeit]]
Bitte kopiere keine Webseiten, die nicht deine eigenen sind, benutze keine urheberrechtlich geschützten Werke ohne Erlaubnis des Urhebers!
Du gibst uns hiermit deine Zusage, dass du den Text selbst verfasst hast, dass der Text Allgemeingut (public domain) ist oder dass der Urheber seine Zustimmung gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weise bitte auf der Diskussionsseite darauf hin. Bitte beachte, dass alle KIF-Beiträge automatisch unter der „Namensnennung-Weitergabe unter gleichen Bedingungen 2.5 “ stehen (siehe KIF:Urheberrechte für Einzelheiten). Falls du nicht möchtest, dass deine Arbeit hier von anderen verändert und verbreitet wird, dann klicke nicht auf „Seite speichern“.
Abbrechen Bearbeitungshilfe (wird in einem neuen Fenster geöffnet)