Kommunikation mit Scheme

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>SchemeJS</language>
[[Programmierparadigmen_-_Computerübungen|Zur Übungsübersicht]]


Im Hintergrund der Arbeitsblätter, die Sie hier verwenden werden, arbeitet ein Scheme-Interpreter. Sie können mit ihm in direkten Dialog treten, indem Sie die entsprechenden Ausdrücke von diesem Interpreter evaluieren lassen: '''speichern & ausführen'''.

===Aufgabe 1:===

Sagen Sie die jeweilige Antwort des Interpreters vorher. Vergleichen Sie anschließend die Antworten des Scheme-Systems mit Ihren Vorhersagen.

'''Hinweis:''' die Zahlen ('''number''') werden nicht nur "nachgeplappert". Sollten Sie nach einiger Überlegung die Antwort trotzdem nicht nachvollziehen können, schauen Sie ins Manual. Alternativ können Sie auch den Help Desk von DrScheme verwenden.
{| cellspacing=10 cellpadding=3
|-
| <run id="4a97fc4c93b30">4</run> || <run id="4a97fc4c946be">12345</run> || <run id="4a97fc4c95272">0.8439</run>
|-
| <run id="4a97fc4c95e2b">-.590</run> || <run id="4a97fc4c969e3">-0</run> || <run id="4a97fc4c9759a">7/3</run>
|-
| <run id="4a97fc4c98150">24/3</run> || <run id="4a97fc4c98d09">9e-8</run> || <run id="4a97fc4c998c2">#b1101</run>
|-
| <run id="4a97fc4c9a4aa">#x1001</run>
|}

===REPL===

In dieser Aufgabe geht es wieder um die Scheme-Antworten, genauer, um den REPL. Übernehmen Sie die Aufgabenstellung von oben und wenden Sie sie auf Symbole ('''symbol''') an. Klären Sie die Ursache und Bedeutung eventueller Fehlermeldungen!
{| cellspacing=10 cellpadding=3
|-
| <run id="4a97fc4c9b031">Hi Scheme</run> || <run id="4a97fc4c9bbe8">pi</run> || <run id="4a97fc4c9c7a1">*</run>
|-
| <run id="4a97fc4c9d358">sqrt</run> || <run id="4a97fc4c9df11">sin</run> || <run id="4a97fc4c9ead2">#t</run>
|-
| <run id="4a97fc4c9f68f">#f</run>
|}

===quote===

Erschließen bzw. wiederholen Sie die Bedeutung des einfachen Hochkommas ('''quote''', auf der Taste mit der Raute) für die Evaluation eines Schemeausdrucks. Geben Sie folgende Ausdrücke ein und vergleichen Sie die Ausgaben mit den vorherigen (ohne '''quote''').
{| cellspacing=10 cellpadding=3
|-
| <run id="4a97fc4ca0243">'Hi Scheme</run> || <run id="4a97fc4ca0df9">'pi</run> || <run id="4a97fc4ca1a86">'*</run>
|- 
| <run id="4a97fc4ca25ca">'sqrt</run> || <run id="4a97fc4ca31b9">'sin</run> || <run id="4a97fc4ca3d61">'#t</run>
|-
|<run id="4a97fc4ca490c">'#f</run>
|}

===quote,quasiquote und unquote===

Sehen Sie sich die folgenden beiden Ausdrücke an und überlegen Sie sich die potenzielle Antwort des Interpreters. Worin liegt der entscheidende Unterschied zwischen den beiden Ausdrücken hinsichtlich ihrer Evaluation?

'''Hinweis:''' Nutzen Sie den Help-Desk von DrScheme, wenn Ihnen die Bedeutungen von '''quote''', '''quasiquote''' und '''unquote''' unklar sein sollten.
<run id="4a97fc4ca54c5">(quote ("Hallo" ,name))</run>
Im Hintergrund wurde '''name''' mit der Zeichenkette '''"Paul"''' verknüpft. 
<code id="4a97fc4c92f4a" hidden>(define name "Paul")</code>
<run id="4a97fc4ca6097">(quasiquote ("Hallo" ,name))</run>

===einfache Rechenoperationen mit Scheme===

Ermitteln Sie die Werte der folgenden Scheme-Ausdrücke im Kopf und überprüfen Sie diese anschließend in Scheme.
{| cellspacing=10 cellpadding=10
|-
| <run id="4a97fc4ca6c34">( + 3 ( * 4 ( - 10 4 ) ) )</run> || <run id="4a97fc4ca7813">( * ( - 2 ( + 2 0 ) ) 45 )</run>
|-
| <run id="4a97fc4ca841a">( + ( * 4 5 ) ( / 4 5 ) )</run> || <run id="4a97fc4ca8c51">( + ( * 4.0 5.0 ) ( / 4.0 5.0 ) )</run>
|}

===Umwandlung mathematischer Ausdrücke===

Wandeln Sie die folgenden mathematischen Ausdrücke in syntaktisch korrekte Schemeausdrücke um. Geben Sie diese anschließend ein.


{| cellspacing=10 cellpadding=10
|- 
| (4 * 5) + 100 
  <run id="4a97fc4ca93b1"></run>
 || (9 * (5 - 3))
    <run id="4a97fc4ca9b83"></run>
|-
| (13 - 1) / (1 + 2)
  <run id="4a97fc4caa352"></run> 
 || (6 + (2 * (3 + 12)) / 5)
    <run id="4a97fc4caab46"></run>
|}


===Umwandlung Ausdrücke in Scheme===

Notieren Sie die folgenden verbal gegebenen Ausdrücke in Scheme und machen Sie sich klar, wie deren Evaluation abläuft.
{| cellspacing=10 cellpadding=3
|-
| die Summe der Zahlen 1, 2, 3, 4 und 5
    <run id="4a97fc4cab2fe"></run>
|| das Produkt aus 3 und der Summe aus 8 und 9
    <run id="4a97fc4cabac9"></run>
|| die Zeichenkette aus dem Wort <tt>"Hallo "</tt>, der Verkettung der Buchstaben <tt>O</tt>, <tt>t</tt>, <tt>t</tt>, <tt>o</tt> und <tt>!</tt>.
    <run id="4a97fc4cac290"></run>
|}
''Hinweis'': Schlagen Sie im Manual unter <tt>string</tt> und <tt>string-append</tt> nach und ermitteln Sie den Typ der Argumente und des jeweiligen Rückgabewertes dieser Prozeduren.

===Prädikate zur Typprüfung===

Stellen Sie die Prädikate zur Typprüfung für Zahlen, Zeichen und Zeichenketten zusammen. Schlagen Sie in einschlägigen Manualen bzw. Dokumentationen, z.B. R5RS (Scheme Standard), nach. Unter einem Prädikat verstehen wir hier ein Scheme-Sprachelement, das genau eine Eingabe erwartet und einen Wahrheitswert zurückgibt. Geben Sie jeweils zwei erprobte Beispiele an.
{| cellspacing=10 cellpadding=3
|-
| <run id="4a97fc4cacaa8">(symbol? 'define)</run> || <run id="4a97fc4cad230">(symbol? "define")</run>
|}

[[Programmierparadigmen_-_Computerübungen|Zur Übungsübersicht]]