You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: forschungsarbeit-ip5-lambda-kalkuel/README.md
+7-12Lines changed: 7 additions & 12 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -16,16 +16,15 @@ Da es bei dieser Forschungsarbeit keine konkrete Aufgabe gibt, sondern nur ein
16
16
17
17
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.
18
18
19
+
Wie zum Beispiel die _Identitätsfunktion_ :
19
20
20
-
Wie zum Beispiel die _Identitätsfunktion_ :
21
-
22
-
```text
21
+
```text
23
22
const id = x => x;
24
-
```
23
+
```
25
24
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.
29
28
30
29
## Was wurde erreicht
31
30
@@ -39,7 +38,7 @@ Beispiel JSDoc-Dokumentation der Blackbird Funktion
39
38
40
39
Diese zusätzliche JSDoc-Integration gibt dem Entwickler in der IDE direkt Parameter-Hinweise beim Programmieren und allgemeine Informationshinweise über die Funktionen.
41
40
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.
43
42
44
43
## Fazit
45
44
@@ -50,7 +49,3 @@ Unsere Konstruktionen aus dem Lambda Kalkül bringen folgende Vorteile mit sich:
50
49
* Die funktionalen Konstruktionen sind einfach zu Testen.
51
50
* Funktions-Komposition ist ein sehr mächtiges Werkzeug, weil dadurch rasch nützliche neue Konstruktionen entstehen.
Copy file name to clipboardExpand all lines: forschungsarbeit-ip5-lambda-kalkuel/der-lambdafizierter-taschenrechner.md
+17-41Lines changed: 17 additions & 41 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,21 +8,21 @@ Für ein Einstieg-Projekt, um sich am beste einmal mit den [Kombinatoren](einfac
8
8
9
9
## Kern des Taschenrechner
10
10
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.
12
12
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.
14
14
15
15
CaluclatorHandler Implementation:
16
16
17
17
```javascript
18
18
constcalculatorHandler=op=>n=>k=>f=>f(op(n)(k));
19
19
```
20
20
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.
22
22
23
23
## Rechnen mit JavaScript-Zahlen
24
24
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:
26
26
27
27
```javascript
28
28
constplus=n=>k=> n + k;
@@ -34,12 +34,10 @@ const division = n => k => n / k;
34
34
// example
35
35
plus(1)(2) // 3
36
36
multiplication(2)(3) // 6
37
-
subtraction(5)(2) // 3
37
+
subtraction(5)(2) // 3
38
38
```
39
39
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:
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.
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.
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.
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:
124
110
125
111
```javascript
126
112
calc(1)(sub)(7)(result) // -6
127
113
128
114
calc(n1)(churchSub)(n7)(result) // 0 bzw. n0
129
115
```
130
116
131
-
####
132
-
133
117
#### Division
134
118
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.
138
120
139
121
#### Maximum call stack size exceeded
140
122
141
123
Bei Berechnung mit grösseren Church-Zahlen und längerer Verkettungen kann es zu einem _Maximum call stack size exceeded_ - Error kommen:
142
124
143
125
```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
145
127
```
146
128
147
-
###
148
-
149
129
## Taschenrechner User-Interface
150
130
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:
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:
156
132
133
+

157
134
135
+
Link zum lambdafizierten Taschenrechner: [Calculator.html](https://mattwolf-corporation.github.io/lambdaCalculusGithubPages/src/calculator/calculator-view.html)
158
136
159
137
## Eigenschaften des lambdafizierter Taschenrechner
160
138
161
139
* Alle Funktionen sind **rein**
162
140
* In allen Funktionen gibt es **keine** Ausdrücke wie _`for`_, _`while`_ oder `do`**Schleifen**.
0 commit comments