Skip to content

Commit 4c2dcbe

Browse files
BenjaminBrodwolfgitbook-bot
authored andcommitted
GitBook: [master] 3 pages and one asset modified
1 parent 65f6663 commit 4c2dcbe

File tree

4 files changed

+30
-59
lines changed

4 files changed

+30
-59
lines changed

.gitbook/assets/repoimage.png

6.54 KB
Loading

README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
![JS Lambda](https://github.com/mattwolf-corporation/ip5_lambda-calculus-in-js/blob/master/repoImage.png)
21
# Lambda Kalkül für praktisches JavaScript
2+
3+
![](.gitbook/assets/repoimage.png)
4+
5+
## Lambda Kalkül für praktisches JavaScript
6+
37
* [Forschungsarbeit - Lambda Kalkül mit JavaScript](https://mattwolf-corporation.gitbook.io/ip5-lambda-calculus/forschungsarbeit-ip5-lambda-kalkuel)
48
* [Einfache Kombinatoren](https://mattwolf-corporation.gitbook.io/ip5-lambda-calculus/forschungsarbeit-ip5-lambda-kalkuel/einfache-kombinatoren)
59
* [Church Encodings - Booleans und Zahlen](https://mattwolf-corporation.gitbook.io/ip5-lambda-calculus/forschungsarbeit-ip5-lambda-kalkuel/church-encodings-zahlen-und-boolesche-werte)
610
* [Der lambdafizierter Taschenrechner](https://mattwolf-corporation.gitbook.io/ip5-lambda-calculus/forschungsarbeit-ip5-lambda-kalkuel/der-lambdafizierter-taschenrechner)
711
* [Immutable Stack](https://mattwolf-corporation.gitbook.io/ip5-lambda-calculus/forschungsarbeit-ip5-lambda-kalkuel/immutable-stack)
812
* [Test-Framework](https://mattwolf-corporation.gitbook.io/ip5-lambda-calculus/forschungsarbeit-ip5-lambda-kalkuel/test-framework)
913

10-
## Author
14+
### Author
1115

1216
* Benjamin Brodwolf [GitHub](http://github.com/BenjaminBrodwolf)
1317
* Pascal Andermatt [GitHub](https://github.com/PascalAndermatt)
1418

15-
16-
17-
18-

forschungsarbeit-ip5-lambda-kalkuel/README.md

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,15 @@ Da es bei dieser Forschungsarbeit keine konkrete Aufgabe gibt, sondern nur ein
1616

1717
1. Als erstes wurde eine eigene kleine Bibliothek von Lambda-Kalkül-Konstruktionen zusammengestellt \([Einfache Kombinatoren](einfache-kombinatoren.md)\). Die Bibliothek wurde mit eigenen Kreationen ergänzt, um diese später in weiteren grösseren Konstruktionen zu verwenden. Diese Bibliothek dient als Werkzeugkasten und ist somit das Fundament unserer Forschungsarbeit.
1818

19+
Wie zum Beispiel die _Identitätsfunktion_ :
1920

20-
Wie zum Beispiel die _Identitätsfunktion_ :
21-
22-
```text
21+
```text
2322
const id = x => x;
24-
```
23+
```
2524

26-
2. Einen Taschenrechner welcher nur aus Lambda-Kalkül-Konstruktionen gebaut wurde. Der Taschenrechner kann mit JavaScript- und mit [Church-Zahlen](church-encodings-zahlen-und-boolesche-werte.md#church-zahlen) Berechnungen ausführen \([Der lambdafizierter Taschenrechner](der-lambdafizierter-taschenrechner.md)\). Die Church-Zahlen gehören auch zum Fundament der Forschungsarbeit und dienen später dazu, Iterationen durchzuführen.
27-
3. Als weitere Herausforderung wollten wir eine unveränderliche Datenstruktur erstellen. Dabei wurde nach eine einfachen Datenstruktur gesucht, auf welcher weitere Datenstrukturen gebaut werden können. Dabei entstand der [Immutable Stack](immutable-stack.md). Das Ziel dieser unveränderlichen Datenstruktur ist, dass bei der Verarbeitung der Daten keine Fehler, die durch Seiteneffekte von anderen Funktionen, enstehen können.
28-
4. Zum Testen von unseren Konstruktionen wurde ein eigenes [Test-Framework ](test-framework.md)implementiert. Es dienst als Qualitätssicherung \(Überprüfung der Funktionalität\) und ist eine fortlaufende Unterstützung beim Refactoring der Konstruktionen.
25+
1. Einen Taschenrechner welcher nur aus Lambda-Kalkül-Konstruktionen gebaut wurde. Der Taschenrechner kann mit JavaScript- und mit [Church-Zahlen](church-encodings-zahlen-und-boolesche-werte.md#church-zahlen) Berechnungen ausführen \([Der lambdafizierter Taschenrechner](der-lambdafizierter-taschenrechner.md)\). Die Church-Zahlen gehören auch zum Fundament der Forschungsarbeit und dienen später dazu, Iterationen durchzuführen.
26+
2. Als weitere Herausforderung wollten wir eine unveränderliche Datenstruktur erstellen. Dabei wurde nach eine einfachen Datenstruktur gesucht, auf welcher weitere Datenstrukturen gebaut werden können. Dabei entstand der [Immutable Stack](immutable-stack.md). Das Ziel dieser unveränderlichen Datenstruktur ist, dass bei der Verarbeitung der Daten keine Fehler, die durch Seiteneffekte von anderen Funktionen, enstehen können.
27+
3. Zum Testen von unseren Konstruktionen wurde ein eigenes [Test-Framework ](test-framework.md)implementiert. Es dienst als Qualitätssicherung \(Überprüfung der Funktionalität\) und ist eine fortlaufende Unterstützung beim Refactoring der Konstruktionen.
2928

3029
## Was wurde erreicht
3130

@@ -39,7 +38,7 @@ Beispiel JSDoc-Dokumentation der Blackbird Funktion
3938

4039
Diese zusätzliche JSDoc-Integration gibt dem Entwickler in der IDE direkt Parameter-Hinweise beim Programmieren und allgemeine Informationshinweise über die Funktionen.
4140

42-
Mit diesem Forschungsprojekt wurde eine solide Grundlage für weitere/zukünftige Forschung auf diesem Gebiet gelegt.
41+
Mit diesem Forschungsprojekt wurde eine solide Grundlage für weitere/zukünftige Forschung auf diesem Gebiet gelegt.
4342

4443
## Fazit
4544

@@ -50,7 +49,3 @@ Unsere Konstruktionen aus dem Lambda Kalkül bringen folgende Vorteile mit sich:
5049
* Die funktionalen Konstruktionen sind einfach zu Testen.
5150
* Funktions-Komposition ist ein sehr mächtiges Werkzeug, weil dadurch rasch nützliche neue Konstruktionen entstehen.
5251

53-
54-
55-
56-

forschungsarbeit-ip5-lambda-kalkuel/der-lambdafizierter-taschenrechner.md

Lines changed: 17 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,21 @@ Für ein Einstieg-Projekt, um sich am beste einmal mit den [Kombinatoren](einfac
88

99
## Kern des Taschenrechner
1010

11-
Die Idee war einen Taschenrechner so zu bauen, der möglichst leicht zu bedienen, und verständlich aufgebaut, ist. Um diese Anforderungen zu erreichen sollte eine einfache Verkettung der arithmetischen Zahlen und Operationen möglich sein.
11+
Die Idee war einen Taschenrechner so zu bauen, der möglichst leicht zu bedienen und verständlich aufgebaut ist. Um diese Anforderungen zu erreichen sollte eine einfache Verkettung der arithmetischen Zahlen und Operationen möglich sein.
1212

13-
Als Helferfunktion wurde eine sogenannter _CalculatorHandler_ entwickelt, mit dem solch ein Konstruktion schlussendlich möglich ist.
13+
Als Helferfunktion wurde eine sogenannter _CalculatorHandler_ entwickelt, mit dem solch eine Konstruktion schlussendlich möglich ist.
1414

1515
CaluclatorHandler Implementation:
1616

1717
```javascript
1818
const calculatorHandler = op => n => k => f => f(op(n)(k));
1919
```
2020

21-
Der _calculatorHandler_ nimmt jeweils eine arithmetische Operation \(Addition, Subtraktion, Multiplikation usw.\), zwei Werte und zum Schluss eine Funktion entgegen. Wie man ihn Anwendet:[ **Addition mit JavaScript-Operatoren und dem** _**CalculatorHandler**_](der-lambdafizierter-taschenrechner.md#addition-mit-javascript-operatoren-und-dem-calculatorhandler)_**.**_
21+
Der _calculatorHandler_ nimmt jeweils eine arithmetische Operation \(Addition, Subtraktion, Multiplikation usw.\), zwei Werte und zum Schluss eine Funktion entgegen.
2222

2323
## Rechnen mit JavaScript-Zahlen
2424

25-
Um mit JavaScript-Zahlen zu rechnen werden die Arithmetische-Operatoren von JavaScript benötigt:
25+
Um mit JavaScript-Zahlen zu rechnen werden die Arithmetischen-Operatoren von JavaScript benötigt:
2626

2727
```javascript
2828
const plus = n => k => n + k;
@@ -34,12 +34,10 @@ const division = n => k => n / k;
3434
// example
3535
plus(1)(2) // 3
3636
multiplication(2)(3) // 6
37-
subtraction(5)(2) // 3
37+
subtraction(5)(2) // 3
3838
```
3939

40-
41-
42-
Mit dem _CalculatorHandler_ und den JavaScript-Operatoren kombiniert, werden vie Point-Freestyle neue \(Calculator-\)Funktionen erstellt:
40+
Mit dem _CalculatorHandler_ und den JavaScript-Operatoren kombiniert, werden via Point-Freestyle neue \(Calculator-\)Funktionen erstellt:
4341

4442
```javascript
4543
const add = calculatorHandler(plus);
@@ -49,17 +47,15 @@ const pow = calculatorHandler(exponentiation);
4947
const div = calculatorHandler(division);
5048
```
5149

52-
53-
54-
Mit der [Thrush-Funktion](einfache-kombinatoren.md) \(`T = x => f => f(x)` \) als den Taschenrechner-Starter und den neue CalculatorFunktionen, ist es mögliche eine unendliche Verkettungen von Zahlen und Operationen zu erstellen.
50+
Mit der [Thrush-Funktion](einfache-kombinatoren.md) \(`T = x => f => f(x)` \) als den Taschenrechner-Starter und den neuen CalculatorFunktionen, ist es mögliche eine unendliche Verkettungen von Zahlen und Operationen zu erstellen.
5551

5652
Beispiel:
5753

5854
```javascript
5955
T(1)(add)(2)(pow)(6)(sub)(2)(div)(8)(add)(7)(multi)(4)(sub)...
6056
```
6157

62-
Um diese Verkettung ein Ende zu setzen und das Resultat der Berechnung zu erhalten, braucht es jeglich die [Identity-Funktion](einfache-kombinatoren.md) `id = x => x` als Letztes, als CalculatorFunktion, anzuwenden.
58+
Um dieser Verkettung ein Ende zu setzen und das Resultat der Berechnung zu erhalten, benötigt es jeglich die [Identitäts-Funktion](einfache-kombinatoren.md) als Letztes anzuwenden.
6359

6460
Beispiel:
6561

@@ -70,32 +66,24 @@ T(5)(multi)(4)(add)(2)(id) // 22
7066
T(5)(div)(5)(multi)(100)(add)(1)(id) // 101
7167
```
7268

69+
Um die Leserlichkeit des Code zu verbessern, wird für die _Trush_- und _id_-Funktion ein passender Variablename gewählt.
7370

74-
75-
Der Verständlichkeit halber für die Anwendung des Taschenrechner, wird die _Trush_- und _id_-Funktion einer passender Variable zugewiesen.
76-
77-
Beispiel:
71+
Implementation \(Umbenennung\):
7872

7973
```javascript
8074
const calc = T;
8175
const result = id;
8276
```
8377

84-
85-
86-
So werden nun mit **JavaScript-Zahlen** und **-Arithmetik** verkettete Berechnungen erstellt.
87-
8878
Beispiel:
8979

9080
```javascript
9181
calc(5)(multi)(4)(sub)(4)(pow)(2)(div)(8)(add)(10)(result) // 42
9282
```
9383

94-
95-
9684
## Rechnen mit Church Encodings-Zahlen
9785

98-
Um den Taschenrechner nicht nur mit JavaScript-Zahlen sondern auch mit den [Church-Zahlen](church-encodings-zahlen-und-boolesche-werte.md) \(`n0, n1, n2, ...` \) gleich benutzen zu können, braucht es die[ lambdafizierte Arithmetik-Operatoren mit Church-Zahlen](church-encodings-zahlen-und-boolesche-werte.md#church-addition-addieren) \(`churchAddition = n => k => n(succ)(k)` , `churchSubstraction = n => k => k(pred)(n)`etc. \) mit dem _CalculatorHandler_ zu kombinieren.
86+
Das der Taschenrechner nicht nur mit JavaScript-Zahlen sondern auch mit [Church-Zahlen](church-encodings-zahlen-und-boolesche-werte.md) rechnen kann, braucht es nur die[ lambdafizierte Arithmetik-Operatoren mit Church-Zahlen](church-encodings-zahlen-und-boolesche-werte.md#church-addition-addieren) mit dem _CalculatorHandler_ zu kombinieren.
9987

10088
Implementationen:
10189

@@ -114,52 +102,40 @@ Beispiel:
114102
calc(n5)(churchMulti)(n9)(churchAdd)(n4)(churchSub)(n7)(result) // 42
115103
```
116104

117-
###
118-
119105
### Die Probleme mit den Church-Zahlen
120106

121107
#### Negative Zahle
122108

123-
Was der lambdafizierter Taschenrechner im vergleich zum JavaScript-Taschenrechner nicht kann sind mit negative Zahlen rechnen, da mit Church-Zahlen nur Werte der Natürlichen-Zahlen angegeben werde kann:
109+
Was der lambdafizierter Taschenrechner im vergleich zum JavaScript-Taschenrechner nicht kann sind mit negative Zahlen rechnen, da Church-Zahlen nur Werte der Natürlichen-Zahlen repräsentiert werden kann:
124110

125111
```javascript
126112
calc(1)(sub)(7)(result) // -6
127113

128114
calc(n1)(churchSub)(n7)(result) // 0 bzw. n0
129115
```
130116

131-
####
132-
133117
#### Division
134118

135-
Gleiches Problem wie mit den negativen Zahlen, können die Church-Zahlen keine Rationale-Zahlen repräsentiere. Darum gibt es auch keinen lambdafizierte Division-Operator.
136-
137-
####
119+
Gleiches Problem wie mit den negativen Zahlen, können die Church-Zahlen keine Rationale-Zahlen repräsentiere. Deswegen gibt es keinen lambdafizierten Division-Operator.
138120

139121
#### Maximum call stack size exceeded
140122

141123
Bei Berechnung mit grösseren Church-Zahlen und längerer Verkettungen kann es zu einem _Maximum call stack size exceeded_ - Error kommen:
142124

143125
```javascript
144-
calc(n5)(cpow)(n8)(cmulti)(n6)(cadd)(n8)(csub)(n9) ... // Maximum call stack size exceeded
126+
calc(n5)(cpow)(n8)(cmulti)(n6)(cadd)(n8)(csub)(n9) ... // Maximum call stack size exceeded
145127
```
146128

147-
###
148-
149129
## Taschenrechner User-Interface
150130

151-
Um den lambdafizierten Taschenrechner, wie ein gewöhnter Taschenrechner auch visuell bedienen zu können, wurde eine statische HTML-Webseite, mit einem grafischen Taschenrechner und den von hier gezeigten Funktionen implementiert:
152-
153-
Lambdafizierter Taschenrechner UI
154-
155-
![The Functional Calculator](../.gitbook/assets/image%20(1).png)
131+
Um den lambdafizierten Taschenrechner, wie ein gewöhnter Taschenrechner auch visuell bedienen zu können, wurde eine statische HTML-Webseite, mit einem grafischen Taschenrechner und den von hier gezeigten Funktionen implementiert:
156132

133+
![](../.gitbook/assets/image.png)
157134

135+
Link zum lambdafizierten Taschenrechner: [Calculator.html](https://mattwolf-corporation.github.io/lambdaCalculusGithubPages/src/calculator/calculator-view.html)
158136

159137
## Eigenschaften des lambdafizierter Taschenrechner
160138

161139
* Alle Funktionen sind **rein**
162140
* In allen Funktionen gibt es **keine** Ausdrücke wie _`for`_, _`while`_ oder `do` **Schleifen**.
163141

164-
165-

0 commit comments

Comments
 (0)