0% fanden dieses Dokument nützlich (0 Abstimmungen)
10 Ansichten1 Seite

Scheme - ProgrammingWiki

Das Dokument beschreibt die funktionale Programmiersprache Scheme. Es erklärt die Berechnung von Fibonacci-Zahlen in Scheme sowie Möglichkeiten zur Beschleunigung dieser Berechnung durch Caching. Des Weiteren werden Dialogeingabe und Zufallszahlenerzeugung in Scheme behandelt.

Hochgeladen von

sekulsea
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen
0% fanden dieses Dokument nützlich (0 Abstimmungen)
10 Ansichten1 Seite

Scheme - ProgrammingWiki

Das Dokument beschreibt die funktionale Programmiersprache Scheme. Es erklärt die Berechnung von Fibonacci-Zahlen in Scheme sowie Möglichkeiten zur Beschleunigung dieser Berechnung durch Caching. Des Weiteren werden Dialogeingabe und Zufallszahlenerzeugung in Scheme behandelt.

Hochgeladen von

sekulsea
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen

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

Das könnte Ihnen auch gefallen