Scheme

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Scheme

Scheme ist eine funktionale Programmiersprache. Aus der Wikipedia:

Die funktionale Programmierung entspringt der mathematischen Grundlagenforschung. In den 1930er Jahren entwickelte Alonzo Church den Lambda-Kalkül als Instrument, um das Entscheidungsproblem zu bearbeiten und dazu den Begriff der berechenbaren Funktion zu definieren. Der Lambda-Kalkül selbst beschäftigt sich nicht mit bestimmten Funktionen, sondern ist nur ein Regelwerk dafür, wie die Anwendung von Funktionen auf ihre Argumente erfolgt und wie dabei mit freien und gebundenen Variablen verfahren wird.

Die besonderen Eigenschaften der funktionalen Programmierung ermöglichen es, auf die in der imperativen Programmierung benötigten inneren Zustände eines Berechnungsprozesses ebenso zu verzichten wie auf die zugehörigen Zustandsänderungen, die auch Seiteneffekte genannt werden. Der Verzicht darauf vereinfacht auf der einen Seite die semantische Analyse eines Computerprogramms erheblich und eröffnet auf der anderen Seite weitreichende Möglichkeiten zur regelbasierten, algebraischen Programmtransformation und -synthese. Daraus ergibt sich die erhebliche praktische Bedeutung der funktionalen Programmierung für die Informatik.

Eine weitere Konsequenz ist, dass es in funktionaler Programmierung besonders einfach ist, Algorithmen ohne Berücksichtigung der Beschaffenheit der bearbeiteten Datenobjekte zu beschreiben und dadurch generischen Programmcode zu erstellen. Viele funktionale Verfahren sind so generisch, dass sie seit den 1950er Jahren keiner Anpassung unterworfen werden mussten.

Fibonacci-Berechnung 1

Ein typisches Beispiel ist die Berechnung einer Fibonacci-Zahl. Das nachfolgende Scheme-Programm beschreibt die dafür nötige Funktion. Wie man erkennt, werden für die Berechnung kein Variablen benötigt. Einzig der Parameter "n" für die wievielte Fibonacci-Zahl berechnet werden soll.

Lassen Sie sich zum Beispiel die 20. Fibonacci-Zahl ausgeben. Die Berechnung wird bereits etwas dauern.

Wenn die Funktion korrekt arbeitet, können beliebige Testvergleiche durchgeführt werden und hier im ProgrammingWiki eine Prüfung eingebaut werden. Beispiel (Testet, ob die Funktion "fib" wie erwartet funktioniert):

 

Quelltext überprüfen:

Fibonacci-Berechnung 2

Ein grosser Nachteil solcher rekursiver Beschreibungen ist der anfallende Berechnungsaufwand. Wird fib(5) aufgerufen, wird fib(3) und fib(4) addiert, was wiederum entsprechend viele Berechnungsschritte erfordert. Je höher n gewählt wird, je länger dauert die gesamte Berechnung. Denn in jedem Schritt müssen immer wieder alle Teilergebnisse neu berechnet werden. Die Berechnung von fib(3) wurde eigentlich bereits während der Rechnung von fib(4) einmal aufgelöst. Mit einer Art Merkliste können sich die Zwischenergebnisse notiert werden. Das beschleunigt die Berechnung massiv.

Weitere Hinweise zur Nutzung von Scheme hier im Wiki

Dialog Ein-/Ausgabe mit Scheme:

Zufallsgenerator: Die folgenden Funktionen gehören nicht zum Scheme Standard. Die Variable "RandomSeed" wird für die Erzeugung von Zufallszahlen verwendet. Diese wird automatisch mit einer zufälligen Zahl vordefiniert. Sie können diese aber umdefinieren, wenn sie immer die gleiche Folge von Zufallszahlen erzeugen wollen.

Persönliche Werkzeuge