Anmelden / Benutzerkonto erstellen
Seite Quelltext anzeigen Versionen/Autoren
Navigation
Startseite Scheme
Letzte Änderungen
Einführungskurs Inhaltsverzeichnis [Verbergen]
FAQ
1 Scheme
Hilfe
2 Fibonacci-Berechnung 1
Suche 3 Fibonacci-Berechnung 2
4 Weitere Hinweise zur Nutzung von Scheme hier im Wiki
Seite Suchen
Scheme
Werkzeuge
Links auf diese Seite Scheme ist eine funktionale Programmiersprache. Aus der
Spezialseiten
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.
x (define fib
(lambda (n)
(if (< n 2)
1
(+ (fib (- n 1)) (fib (- n 2))))))
x (fib 5)
ausführen
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:
jetzt prü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.
x (define fib-memo
(let ((fib-memoliste '()))
(lambda (n)
(let ((rek-aufrufe 0))
(letrec
((fib-memo-hilf
(lambda (n)
(let ((memowert (assoc (list n) fib-memoliste)))
(if memowert
(cdr memowert)
(let ((resultat (fib-hilf n)))
(set! fib-memoliste (cons (cons (list n) resultat) fib-memoliste)) resul
(fib-hilf
(lambda (n)
(set! rek-aufrufe (+ rek-aufrufe 1))
(if (< n 2)
1
(+ (fib-memo-hilf (- n 1))(fib-memo-hilf (- n 2)))))))
(list n (fib-hilf n) rek-aufrufe))))))
x (fib-memo 100)
ausführen
Weitere Hinweise zur Nutzung von Scheme hier im Wiki
Dialog Ein-/Ausgabe mit Scheme:
x (define name (inputDialog "Gib deinen Namen ein:"))
(showMessage (string-append "Hallo " name))
ausführen
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.
x (random) ;liefert eine Gleitkommazahl zwischen 0 und 1
ausführen
x (randomInt 100) ;liefert eine Ganzzahl zwischen 0 und 99
ausführen
x (define RandomSeed 123456789)
(randomInt 6)
ausführen
Diese Seite wurde zuletzt am 2. November 2020 um 21:02 Uhr geändert.
Diese Seite wurde bisher 27.130-mal abgerufen. Datenschutz
Über ProgrammingWiki Impressum