Prozeduren und bedingte Ausdrücke

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Scheme</language>
=== Aufgabe 1 ===
Definieren Sie die folgenden Variablen und beachten Sie die zugehörigen Ausgaben von Scheme.Machen Sie sich noch einmal klar, warum define eine Sonderform (special form) ist. Verweilen Sie bei den Fehlermeldungen solange, bis Sie sie vollständig interpretieren können.

{| cellspacing=10 cellpadding=3
|-
|<eval>(define number1 553344)</eval> || <eval>(define number2 0.006) </eval>||<eval>(define tier ’maus) </eval> 
|-
|<eval>(define number3 number2)</eval>||<eval>(define number4 number1)</eval>
|}

Geben die folgenden Ausdrücke ein und interpretieren Sie die Schemeantworten. 
Versuchen Sie diese Antworten vorherzusagen. Machen Sie sich an passender Stelle
auch mit dem Datentyp “String” (Zeichenkette) im Manual vertraut.

{| cellspacing=10 cellpadding=3
|-
|<eval>number1</eval> || <eval>number2</eval> || <eval>number3</eval>
|-
|<eval>"number3"</eval> || <eval>tier</eval> || <eval>number4</eval>
|-
|<eval>"number1"</eval>
|}


===Aufgabe 2===

Erproben Sie die Verwendung von define und set! anhand selbst gewählter                      ̈
Beispiele (z.B. pi). Uberprüfen Sie anschließend, ob die neuen Variablenbindungen
in der globalen Umgebung eingetragen wurden.

<eval rows=10 cols=30></eval>

===Aufgabe 3===

Der folgende Ausdruck beschreibt eine Prozedur zur Ermittlung einer Quadratzahl.
<eval>((lambda (n) (* n n)) 17)</eval>

Ersetzen Sie die gebundene Variable n mit dem Symbol basis und wiederholen
Sie den Aufruf. Modifizieren Sie den Ausdruck so, dass die Kubikzahl berechnet
wird.
<eval rows=5 cols=30>;Kubikzahl </eval>

===Aufgabe 4===
Geben Sie einen Ausdruck ein, der den Fläheninhalt eines Kreises mit dem Radius r berechnet. Machen Sie dabei Gebrauch von dem Symbol pi, dessen Variablenbindung Sie nach dem Muster von Aufgabe 2 herstellen. 
<eval>;Kreisberechnung mit PI</eval>

===Aufgabe 5===

Verwenden Sie <tt>cons</tt> und <tt>list</tt>um die nachstehenden Listen zu erzeugen.
Beispiel: 
<eval>(cons 1 (cons (cons 2 ()) ()))</eval>
Hinweis: Beachten Sie, dass cons ein Paar erzeugt, wenn Sie als zweites Argument
keine Liste ubergeben.
{|
| ||cons||list
|-
|<tt>(5 4 3)</tt>||<eval>;cons1</eval>||<eval>;list1</eval>              ̈
|-
|<tt>(5 (4 (3)))</tt>||<eval>;cons2</eval>||<eval>;list2</eval>  
|-
|<tt>((1 3) (4) 5)</tt>||<eval>;cons3</eval>||<eval>;list3</eval>  
|-
|<tt>((1 2) (3 4) (5))</tt>||<eval>;cons4</eval>||<eval>;list4</eval>  
|}

===Aufgabe 6===                                         
Verwenden Sie die Prozeduren car und cdr, um auf die jeweils geforderten Elemente zuzugreifen.
Hinweis: Vergessen Sie nicht die Evaluation der Liste als Schemeausdruck zu unterdrücken.

Zugriff auf:
      •  die Zahl 1 in (+ 1 2 3 4 5)
<eval></eval>	
      •  die Zahl 5 in (+ 1 2 3 4 5)
<eval></eval>
      •  das Symbol für die Addition in (* 3 (+ 8 9))
<eval></eval>                      
      •  die 9 in (* 3 (+ 8 9))
<eval></eval>
      •  das Ausrufezeichen (als Scheme-Zeichen) #\! in (string-append "Hallo " (string #\O #\t #\t #\o #\!))
<eval></eval>
            
7. Erproben Sie die Prozedur <tt>briefporto</tt> für verschiedene Briefgewichte. Die Prozedur nimmt eine natürliche Zahl für das Gewicht (in Gramm) eines Briefes und gibt einen Preis (in Euro) als Dezimalzahl zurück. Falls ein Brief schwerer als 1000g ist, übernimmt unser fiktives Postunternehmen die Zustellung für 12345 Euro.

<code rows=5 cols=40>;Funktion Briefporto</code>

<eval>(briefporto 2222)</eval>

<eval>(briefporto 13)</eval>

<eval>(briefporto 130)</eval>

<check>(and (= (briefporto 2222) 12345) (= (briefporto 13) 1.1) (= (briefporto 130) 3.0))</check>