[Informatik-Seminar WS2004/05] [Inhalt] [Zurück] [Weiter]
In diesem Kapitel wird der Einfluss durch LISP auf die Sprache Scheme erläutert. Dabei geht es um die grundlegenden Eigenschaften. Die genaue Semantik und Syntax von Scheme wird in den folgenden Kapiteln erläutert.
Hier werden nur die Elemente der Sprachen erklärt, die für eine funktionale Programmierung
notwendig sind. Scheme ermöglicht z.B. auch das erneute Zuweisen eines Wertes an
eine Variable mittels set!
. Dies widerspricht den Grundsätzen der
funktionalen Programmierung.
2.1 Entstehung von LISP und Scheme
2.2 Der Einfluss durch LISP: Alles ist eine Liste
2.3 Eine einfache Darstellung der Syntax
LISP ist eine Sprache, die als einzige Datenstruktur die Liste verwendet. Sowohl der Programmcode, als auch die Daten, werden in Form von Listen dargestellt.
Ein Scheme Programm besteht also nur aus Listen. Hier schon mal zwei Beispiele: Eine Liste wird durch zwei Klammern und dessen Inhalt dargestellt. Dies ist eine Liste mit vier Elementen.
(1 2 3 4)
Ein Funktionsaufruf ist ebenfalls eine Liste. Das erste Element ist der Funktionsname, die restlichen Elemente sind die Argumente.
(func arg1 arg2 arg3)
Eine Funktion, die die Fakultät einer Zahl errechnet, sieht so aus: Man erkennt hier, dass die Darstellung in Form von Listen, die wiederum Listen enthalten, ausreichend ist.
(define fak
(lambda (x)
(if (= x 0)
1
(* x (fak (- x 1))))))
In Scheme (und LISP) sind alle Programme und Daten Ausdrücke. Dabei gibt es zwei Arten von Ausdrücken: Atomare (einfache) und Kombinierte (z.B. Listen). Atomare Ausdrücke sind z.B. Nummern oder Strings. Diese stehen jeweils für einen Wert. Kombinierte Typen sind z.B. Listen oder Vektoren.
Die vereinfachte Syntax von Scheme lässt sich so beschreiben:
expression ->
simpledatum | compounddata
simpledatum
-> number | string | identifier | character | boolean
compounddata
-> '('expression-sequence')'
expression-sequence -> expression expression-sequence | expression
Weil Programme Beschreibungen von Ausdrücken sind, muss es Regeln geben nach denen das Programm ausgewertet wird. Dabei befolgt Scheme diese drei Regeln:
Aus diesen Regeln ergibt sich, dass alle Ausdrücke als Präfix geschrieben werden müssen. Weiterhin wird deutlich, dass der Bezeichner für eine Funktion klar von dem Aufruf der Funktion getrennt sein muss. Eine Funktion kann also auch Argument oder Ergebnis sein.
Die folgende Grafik stellt die drei Auswertungsregeln in einem Flussdiagram dar:
Beispiele für verschiedene Ausdrücke und deren Werte:
42 => 42
"Hallo" => Hallo
(1 2) => Fehler, weil 1 keine Funktion ist
(quote (1 2)) => (1 2)
(+ 4 5) => 9
(* (+ 1 2) 3 ) => (* 3 3) => 9
+ => #<primitive:+>
[Informatik-Seminar WS2004/05] [Inhalt] [Zurück] [Weiter] [Seitenanfang]