lambda-calculus-in-js v1.0.1
description: von Benjamin Brodwolf & Pascal Andermatt
Lambda Kalkül für praktisches JavaScript
Was ist Lambda Kalkül?
Lambda Kalkül ****ist ein formales System, in der mathematische Logik zur Berechnung und Untersuchung von Funktionen gilt. Es ist ein universelles Berechnungsmodel , mit dem jede Turing-Maschine simuliert werden kann. Es wurde von dem Mathematiker Alonzo Church in den 1930er Jahren als Teil seiner Forschung zu den Grundlagen der Mathematik eingeführt.
Lambda-Kalkül hat im Grunde nichts in sich. Es hat nur drei Dinge: Variablenbindung, einen Weg, Funktionen zu bauen und einen Weg, Funktionen anzuwenden. Es hat keine anderen Kontrollstrukturen, keine anderen Datentypen, gar nichts.
Was ist JavaScript?
JavaScript ist die Programmiersprache die hauptsächlich im Web verwendet wird und durch den Browser ausgeführt wird. JavaScript integriert dabei viele funktionale Aspekte, stellt aber auch einiges an Funktionalität aus der objektorientierten Programmierung zur Verfügung. Es besteht also die Möglichkeit, in vielen verschiedenen Paradigmen zu programmieren.
Lambda Kalkül & JavaScript
Das Konzept ist, Lambda Kalkül mit der Programmiersprache JavaScript zu verbinden. Das heisst, in nur rein funktionalen Paradigma Program-Codes zu schreiben (purely functional). JavaScript bietet dazu Sprachelemente wie Closures und Funktionen. Sie machen es möglich, dass wir in JavaScript funktional programmieren können. Es gewährleistet die Konzepte der Seiteneffektfreiheit, Zustandslosigkeit, Variablenbindung statt Zuweisung, Funktionskomposition und Funktionen höherer Ordnung (high order functions) zu schreiben.
Forschungsarbeit
Ziel der Arbeit ist es, neue Konstruktionen aus dem untypisierten Lambda Kalkül, mit der Programmiersprache JavaScript zu bauen. Diese Konstruktionen haben das Ziel, JavaScript Applikationen robuster, sicherer und wartbarer zu machen. Bei diesen Konstruktionen setzen wir komplett auf die Werte der reinen funktionalen Programmierung:
- Reinheit (pure functions): Funktionen ohne Seiteneffekte (wie mathematische Funktionen)
- Unveränderlichkeit (immutable Datastructure): __ Unveränderliche Datenstrukturen
- Iteration: Eine Iteration ohne Ausdrücke wie
for
,while
oderdo
Schleifen - Fehlerbehandlung ohne
throw
Ausdruck - Funktionen höherer Ordnung (high order functions).
- Zustandslosigkeit
Abgrenzung von objektorientierter Programmierung:
Es werden keine objektorientierte Konzepte wie Klassen oder Vererbung usw. verwendet.
Inhaltsverzeichnis
Eine Forschungsarbeit: Projekt (IP5) und Bacherlorarbeit (IP6) von
**Benjamin Brodwolf** & **Pascal Andermatt**
[GitHub](http://github.com/BenjaminBrodwolf) [GitHub](https://github.com/PascalAndermatt)
Einen besonderes Dankschön an unseren Projektbetreuer, Auftraggeber, Supporter und Inspirator:
Prof. Dierk König****