lny-interpreter 0.99.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/launch.json +19 -0
- package/README.md +96 -0
- package/book_ALT/LennySmartIcon1.png +0 -0
- package/book_ALT/chapter01.md +141 -0
- package/book_ALT/chapter02.md +48 -0
- package/book_ALT/chapter03.md +28 -0
- package/book_ALT/chapter04.md +19 -0
- package/book_ALT/chapter05.md +21 -0
- package/book_ALT/chapter06.md +167 -0
- package/book_ALT/chapter07.md +232 -0
- package/book_ALT/chapter08.md +200 -0
- package/book_ALT/chapter09.md +175 -0
- package/book_ALT/chapter10.md +196 -0
- package/book_ALT/deckblatt.md +60 -0
- package/book_ALT/images/Lenny01.png +0 -0
- package/book_ALT/images/Lenny02.png +0 -0
- package/book_ALT/images/Lenny03.png +0 -0
- package/book_ALT/images/Lenny04.png +0 -0
- package/book_ALT/images/Lenny05.png +0 -0
- package/book_ALT/images/Lenny06.png +0 -0
- package/book_ALT/images/Lenny07.png +0 -0
- package/book_ALT/images/Lenny08.png +0 -0
- package/book_ALT/images/Lenny09.png +0 -0
- package/book_ALT/images/Lenny10.png +0 -0
- package/book_ALT/images/Lenny11.png +0 -0
- package/book_ALT/images/Lenny12.png +0 -0
- package/book_ALT/images/Lenny13.png +0 -0
- package/book_ALT/images/Lenny14.png +0 -0
- package/book_ALT/images/Lenny15.png +0 -0
- package/book_ALT/lehrerheft.md +255 -0
- package/dist/ast/ast.d.ts +126 -0
- package/dist/ast/ast.d.ts.map +1 -0
- package/dist/ast/ast.js +3 -0
- package/dist/ast/ast.js.map +1 -0
- package/dist/browser.d.ts +2 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +1067 -0
- package/dist/browser.js.map +1 -0
- package/dist/examples.d.ts +11 -0
- package/dist/examples.d.ts.map +1 -0
- package/dist/examples.js +65 -0
- package/dist/examples.js.map +1 -0
- package/dist/i18n/i18n.d.ts +18 -0
- package/dist/i18n/i18n.d.ts.map +1 -0
- package/dist/i18n/i18n.js +505 -0
- package/dist/i18n/i18n.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/interpreter/interpreter.d.ts +40 -0
- package/dist/interpreter/interpreter.d.ts.map +1 -0
- package/dist/interpreter/interpreter.js +415 -0
- package/dist/interpreter/interpreter.js.map +1 -0
- package/dist/lexer/lexer.d.ts +87 -0
- package/dist/lexer/lexer.d.ts.map +1 -0
- package/dist/lexer/lexer.js +425 -0
- package/dist/lexer/lexer.js.map +1 -0
- package/dist/lny-config.yml +6 -0
- package/dist/parser/parser.d.ts +50 -0
- package/dist/parser/parser.d.ts.map +1 -0
- package/dist/parser/parser.js +605 -0
- package/dist/parser/parser.js.map +1 -0
- package/dist/repl.d.ts +3 -0
- package/dist/repl.d.ts.map +1 -0
- package/dist/repl.js +472 -0
- package/dist/repl.js.map +1 -0
- package/dist/run-file.d.ts +2 -0
- package/dist/run-file.d.ts.map +1 -0
- package/dist/run-file.js +140 -0
- package/dist/run-file.js.map +1 -0
- package/dist/test.d.ts +2 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +72 -0
- package/dist/test.js.map +1 -0
- package/dist/world/world.d.ts +103 -0
- package/dist/world/world.d.ts.map +1 -0
- package/dist/world/world.js +416 -0
- package/dist/world/world.js.map +1 -0
- package/docs/About.md +19 -0
- package/docs/INTERPRETER.md +240 -0
- package/docs/README.md +68 -0
- package/docs/i18n/README.md +20 -0
- package/docs/lny-referenz.md +161 -0
- package/docs/lny_ueberblick.md +33 -0
- package/examples/00-demo.lny +3 -0
- package/examples/01-variable-assignment.lny +4 -0
- package/examples/02-conditional.lny +7 -0
- package/examples/03-while-loop.lny +6 -0
- package/examples/04-for-loop.lny +5 -0
- package/examples/05-lenny-movement.lny +10 -0
- package/examples/06-procedure.lny +6 -0
- package/examples/fuer-range-1.lny +4 -0
- package/examples/fuer-range-2.lny +6 -0
- package/examples/fuer-range-3.lny +6 -0
- package/examples/fuer-range-4.lny +4 -0
- package/examples/fuer-range-5.lny +6 -0
- package/examples/solange-verschachtelt.lny +12 -0
- package/favicon.ico +0 -0
- package/index.html +108 -0
- package/jest.config.js +7 -0
- package/lny-config.yml +6 -0
- package/package.json +37 -0
- package/settings.json +4 -0
- package/src/ast/ast.ts +182 -0
- package/src/browser.ts +1274 -0
- package/src/examples.ts +68 -0
- package/src/i18n/i18n.ts +537 -0
- package/src/index.ts +6 -0
- package/src/interpreter/interpreter.ts +453 -0
- package/src/lexer/lexer.ts +493 -0
- package/src/parser/parser.ts +711 -0
- package/src/repl.ts +496 -0
- package/src/test.ts +71 -0
- package/src/world/world.ts +512 -0
- package/style.css +315 -0
- package/test1.lny +2 -0
- package/tests/interpreter.test.ts +42 -0
- package/tests/parser.test.ts +18 -0
- package/tsconfig.json +19 -0
- package/vercel.json +7 -0
- package/vscode-lny/.vscode/launch.json +13 -0
- package/vscode-lny/.vscodeignore +3 -0
- package/vscode-lny/README.md +83 -0
- package/vscode-lny/language-configuration.json +19 -0
- package/vscode-lny/license.txt +21 -0
- package/vscode-lny/lny-language-0.1.0.vsix +0 -0
- package/vscode-lny/package.json +41 -0
- package/vscode-lny/snippets/lny.json +136 -0
- package/vscode-lny/syntaxes/lny.tmLanguage.json +85 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.2.0",
|
|
3
|
+
"configurations": [
|
|
4
|
+
{
|
|
5
|
+
"name": "Lny: Aktive Datei ausfuehren",
|
|
6
|
+
"type": "node-terminal",
|
|
7
|
+
"request": "launch",
|
|
8
|
+
"command": "npm run start:repl -- \"${relativeFile}\"",
|
|
9
|
+
"cwd": "${workspaceFolder}"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"name": "Lny: REPL starten",
|
|
13
|
+
"type": "node-terminal",
|
|
14
|
+
"request": "launch",
|
|
15
|
+
"command": "npm run start:repl",
|
|
16
|
+
"cwd": "${workspaceFolder}"
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
}
|
package/README.md
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Lenny2
|
|
2
|
+
|
|
3
|
+
Letzte Aktualisierung: **01/04/2026**
|
|
4
|
+
|
|
5
|
+
Interpreter-Implementierung fuer **Lny 1.0** in TypeScript mit:
|
|
6
|
+
|
|
7
|
+
- Lexer + Parser + AST + Evaluator
|
|
8
|
+
- Mehrsprachigen Kernbefehlen (de, en, fr, es, it)
|
|
9
|
+
- Mehrsprachigen Weltbefehlen (LennyWorld)
|
|
10
|
+
- REPL fuer die Konsole
|
|
11
|
+
- Browser-UI (index.html)
|
|
12
|
+
|
|
13
|
+
## Schnellstart
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install
|
|
17
|
+
npm run build
|
|
18
|
+
npm run test
|
|
19
|
+
npm run start:repl
|
|
20
|
+
# optional: direkt ein Skript starten
|
|
21
|
+
npm run start:repl -- examples/00-demo.lny
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Installation des npm package
|
|
25
|
+
|
|
26
|
+
## Installation & Ausführung als npm-Package
|
|
27
|
+
|
|
28
|
+
1. **Installation (empfohlen):**
|
|
29
|
+
```bash
|
|
30
|
+
npm install -g lny-interpreter
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
2. **Starten der Lny-Konsole (REPL):**
|
|
34
|
+
```bash
|
|
35
|
+
lny
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
3. **Direktes Ausführen eines Skripts:**
|
|
39
|
+
```bash
|
|
40
|
+
lny examples/00-demo.lny
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
4. **Ohne Installation (direkt mit npx):**
|
|
44
|
+
```bash
|
|
45
|
+
npx lny-interpreter
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Hinweis:**
|
|
49
|
+
Die REPL unterstützt Kommandos wie `:help`, `:echo on|off`, `:lang <de|en|fr|es|it>`, `:state`, `:run <skript.lny>`, `:exit`.
|
|
50
|
+
|
|
51
|
+
## Projektstruktur
|
|
52
|
+
|
|
53
|
+
- `src/lexer/lexer.ts`: Tokenizer mit sprachuebergreifender Keyword-Erkennung
|
|
54
|
+
- `src/parser/parser.ts`: Parser mit Operator-Prioritaet und Klammerausdruecken
|
|
55
|
+
- `src/interpreter/interpreter.ts`: AST-Interpreter inkl. Kontrollfluss
|
|
56
|
+
- `src/world/world.ts`: LennyWorld + Built-ins (`RUN`, `TURN_LEFT`, ...)
|
|
57
|
+
- `src/i18n/i18n.ts`: Uebersetzungen fuer Befehle und Meldungen
|
|
58
|
+
- `src/repl.ts`: Interaktive Konsolen-REPL
|
|
59
|
+
- `examples/*.lny`: Ausfuehrbare Lny-Skriptdateien (Beispiel: `examples/00-demo.lny`)
|
|
60
|
+
- `index.html`: Browser-Oberflaeche
|
|
61
|
+
|
|
62
|
+
## Spracheigenschaften
|
|
63
|
+
|
|
64
|
+
- Kernbefehle intern auf Englisch modelliert (Token/AST)
|
|
65
|
+
- Eingabe in einer der unterstuetzten Landessprachen
|
|
66
|
+
- Auswertung von verschachtelten Ausdruecken inkl. Klammern
|
|
67
|
+
- Unterstuetzung fuer:
|
|
68
|
+
- `IF/THEN/ELSE/END`
|
|
69
|
+
- `WHILE/END`
|
|
70
|
+
- `FOR/IN/END`
|
|
71
|
+
- `VAR`, `SET` (per `<=`)
|
|
72
|
+
- `LOG`, `PROC`, `REM`
|
|
73
|
+
- Arithmetik, Vergleich, Logik, Potenz, zusammengesetzte Zuweisungen
|
|
74
|
+
|
|
75
|
+
## Hinweise
|
|
76
|
+
|
|
77
|
+
- Die REPL unterstuetzt zusaetzlich:
|
|
78
|
+
- `:lang <de|en|fr|es|it>`
|
|
79
|
+
- `:state`
|
|
80
|
+
- `:clear`
|
|
81
|
+
- `:echo on|off`
|
|
82
|
+
- `:run <pfad/zum/skript.lny>`
|
|
83
|
+
- `:help`
|
|
84
|
+
- `:exit`
|
|
85
|
+
|
|
86
|
+
- Konfiguration ueber `lny-config.yml`:
|
|
87
|
+
- `language: de`
|
|
88
|
+
- `field_size: 10x10` (Default)
|
|
89
|
+
|
|
90
|
+
- `.lny`-Skripte ausfuehren:
|
|
91
|
+
- Beim Start: `npm run start:repl -- examples/00-demo.lny`
|
|
92
|
+
- In der REPL: `:run examples/00-demo.lny`
|
|
93
|
+
|
|
94
|
+
- Eine ausfuehrliche Dokumentation liegt in `docs/INTERPRETER.md`.
|
|
95
|
+
|
|
96
|
+
|
|
Binary file
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Kapitel 1: Willkommen in Lennys Welt
|
|
2
|
+
|
|
3
|
+
Stell dir vor, du hast einen Hund.
|
|
4
|
+
|
|
5
|
+
Er heißt Lenny.
|
|
6
|
+
|
|
7
|
+
Lenny ist schlau.
|
|
8
|
+
|
|
9
|
+
Aber er versteht nur ganz bestimmte Befehle.
|
|
10
|
+
|
|
11
|
+
Und genau hier beginnt Programmieren.
|
|
12
|
+
|
|
13
|
+
##💡 Was ist ein Programm?
|
|
14
|
+
|
|
15
|
+
Ein Programm ist einfach:
|
|
16
|
+
|
|
17
|
+
Eine Liste von Befehlen, die Schritt für Schritt ausgeführt werden.
|
|
18
|
+
|
|
19
|
+
So wie eine Anleitung
|
|
20
|
+
|
|
21
|
+
```lny
|
|
22
|
+
LAUF
|
|
23
|
+
LAUF
|
|
24
|
+
DREH_LINKS
|
|
25
|
+
LAUF
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Was passiert hier?
|
|
29
|
+
|
|
30
|
+
👉 Lenny läuft zweimal, dreht sich und läuft weiter.
|
|
31
|
+
|
|
32
|
+
Das ist schon ein Programm.
|
|
33
|
+
|
|
34
|
+
## 🧩 Was ist ein Befehl?
|
|
35
|
+
|
|
36
|
+
Ein Befehl ist eine Anweisung, die Lenny versteht.
|
|
37
|
+
|
|
38
|
+
Zum Beispiel:
|
|
39
|
+
|
|
40
|
+
- LAUF
|
|
41
|
+
- DREH_LINKS
|
|
42
|
+
- NIMM
|
|
43
|
+
|
|
44
|
+
👉 Jeder Befehl löst eine Aktion aus.
|
|
45
|
+
|
|
46
|
+
💡 Wichtig:
|
|
47
|
+
|
|
48
|
+
Lenny macht genau das, was du sagst.
|
|
49
|
+
Nicht mehr. Nicht weniger.
|
|
50
|
+
|
|
51
|
+
## 🧠 Was macht der Interpreter?
|
|
52
|
+
|
|
53
|
+
Du schreibst den Code.
|
|
54
|
+
Aber wer führt ihn aus?
|
|
55
|
+
|
|
56
|
+
👉 Das macht der Interpreter.
|
|
57
|
+
|
|
58
|
+
Er liest dein Programm Zeile für Zeile und sagt Lenny:
|
|
59
|
+
|
|
60
|
+
Mach jetzt DAS.
|
|
61
|
+
|
|
62
|
+
💡 Ohne Interpreter passiert… nichts.
|
|
63
|
+
|
|
64
|
+
## 📏 Wozu gibt es eine Syntax?
|
|
65
|
+
|
|
66
|
+
Syntax ist wie Grammatik.
|
|
67
|
+
|
|
68
|
+
Wenn du sagst:
|
|
69
|
+
|
|
70
|
+
„Lauf links drehen jetzt“
|
|
71
|
+
|
|
72
|
+
… versteht dich niemand.
|
|
73
|
+
|
|
74
|
+
Wenn du sagst:
|
|
75
|
+
|
|
76
|
+
```lny
|
|
77
|
+
DREH_LINKS
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
👉 Alles klar
|
|
81
|
+
|
|
82
|
+
💡 Computer sind da streng:
|
|
83
|
+
|
|
84
|
+
falsches Wort → Fehler
|
|
85
|
+
|
|
86
|
+
falsche Reihenfolge → Fehler
|
|
87
|
+
|
|
88
|
+
## 🤖 Warum versteht der Computer nur „komische Befehle“?
|
|
89
|
+
|
|
90
|
+
Computer funktioneieren anders als wir Menschen.
|
|
91
|
+
|
|
92
|
+
Sie verstehen nicht so etwas wie:
|
|
93
|
+
|
|
94
|
+
Lenny, geh mal ein bisschen nach vorne.
|
|
95
|
+
|
|
96
|
+
Sie verstehen nur:
|
|
97
|
+
|
|
98
|
+
```lny
|
|
99
|
+
LAUF
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
oder
|
|
103
|
+
|
|
104
|
+
```lny
|
|
105
|
+
LAUF 50
|
|
106
|
+
```
|
|
107
|
+
👉 Klar, eindeutig, keine Missverständnisse.
|
|
108
|
+
|
|
109
|
+
Die Zahl *50* hat irgendetwas zu bedeuten. Was genau, hängt natürlich von der *Syntax* des Befehls ab. Und diese Syntax mussst Du natürlich kennen.
|
|
110
|
+
|
|
111
|
+

|
|
112
|
+
|
|
113
|
+
## 🚀 KI ändert (fast) alles
|
|
114
|
+
|
|
115
|
+
Früher:
|
|
116
|
+
Computer konnten nur exakte Befehle verstehen.
|
|
117
|
+
|
|
118
|
+
Heute mit KI:
|
|
119
|
+
|
|
120
|
+
- Natürliche Sprache wird verstanden
|
|
121
|
+
- Bilder werden erkannt
|
|
122
|
+
- Texte werden so geschrieben, dass sie auch von einem Menschen stammen könnten
|
|
123
|
+
|
|
124
|
+
👉 Aber:
|
|
125
|
+
Im Hintergrund läuft trotzdem Code.
|
|
126
|
+
|
|
127
|
+
Auch mit KI werden Programmierer gebraucht, wenngleich sich ihre Aufgaben ändern werden 😉
|
|
128
|
+
|
|
129
|
+
Kann KI auch Lny-Programme schreiben?
|
|
130
|
+
|
|
131
|
+
Selbstverständlich.Das wird auch noch ein Thema dieses Buches sein.
|
|
132
|
+
|
|
133
|
+
Dann muss ich doch eigentlich selber nicht mehr programmieren, oder?
|
|
134
|
+
|
|
135
|
+
Das kommt darauf an. Wenn Du es lernen willst, und das willst Du, dann musst Du den Code auch selber schreiben.
|
|
136
|
+
|
|
137
|
+
Später im Berufsleben wird Dir KI aber sehr viel unter die Arme greifen und sehr viel Code für Dich schreiben.
|
|
138
|
+
|
|
139
|
+
Es wird aber trotzdem sehr wichtig, dass Du den Code verstehts, denn die KI für Dich schreib.
|
|
140
|
+
|
|
141
|
+
Bleib also dran. Es wird Dir mit Sicherheit Spaß machen.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# 📦 Variablen – das Gedächtnis des Programms
|
|
2
|
+
|
|
3
|
+
Eine Variable ist wie eine Kiste.
|
|
4
|
+
|
|
5
|
+
Du kannst etwas hineinlegen:
|
|
6
|
+
|
|
7
|
+
```lny
|
|
8
|
+
VAR x
|
|
9
|
+
SETZE x << 5
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
👉 Jetzt merkt sich x die Zahl 5.
|
|
13
|
+
|
|
14
|
+
🔤 Texte sind etwas Besonderes
|
|
15
|
+
|
|
16
|
+
Zahlen sind einfach:
|
|
17
|
+
|
|
18
|
+
```lny
|
|
19
|
+
SETZE x << 5
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Texte brauchen Anführungszeichen:
|
|
23
|
+
|
|
24
|
+
```lny
|
|
25
|
+
SETZE name << "Lenny rennt"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
oder Apostrophe:
|
|
29
|
+
|
|
30
|
+
```lny
|
|
31
|
+
SETZE name << 'Lenny rennt'
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
🔄 Wie bekommt eine Variable ihren Wert?
|
|
35
|
+
|
|
36
|
+
Durch Zuweisung:
|
|
37
|
+
|
|
38
|
+
```lny
|
|
39
|
+
SETZE x << 10
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
👉 Lies das wie:
|
|
43
|
+
|
|
44
|
+
Setze x auf den Wert 10
|
|
45
|
+
|
|
46
|
+
## Zusammmenfassung
|
|
47
|
+
|
|
48
|
+
Über eine Variable merkt sich ein Programm einen Wert. Allerdings nur solange wie das Programm "läuft". Danach ist alles wieder vergessen. Damit sich ein Programm einen Wert dauerhaft merken kann, muss es ihn auf einem Speichermedium wie einer Festplatte abspeichern. Das ist bei *lny* aber nicht möglich.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# ⚖️ Entscheidungen – wahr oder falsch
|
|
2
|
+
|
|
3
|
+
Computer denken nicht wie wir.
|
|
4
|
+
|
|
5
|
+
Sie kennen nur:
|
|
6
|
+
|
|
7
|
+
- WAHR
|
|
8
|
+
- FALSCH
|
|
9
|
+
|
|
10
|
+
Hier ein Beispiel
|
|
11
|
+
|
|
12
|
+
```lny
|
|
13
|
+
WENN IST_FREI
|
|
14
|
+
DANN
|
|
15
|
+
LAUF
|
|
16
|
+
SONST
|
|
17
|
+
DREH_LINKS
|
|
18
|
+
ENDE
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+

|
|
22
|
+
|
|
23
|
+
👉 Entweder frei oder nicht.
|
|
24
|
+
Es gibt für den Computer kein „vielleicht“.
|
|
25
|
+
|
|
26
|
+
## Zusammenfassung
|
|
27
|
+
|
|
28
|
+
Eine Entscheidung ist ein Befehl, der entscheidet, ob ein anderer Befehl (meistens aber mehrere Befehle) ausgeführt wird oder nicht. Für Entscheidungen hat *lny* die Befehle *WENN*, *DANN* und *SONST* im Angebot. Und am Ende muss wieder ein *ENDE* stehen, damit der Interpreter weiß, welche Befehle zur Entscheidung gehören.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# 🔁 Wiederholungen – die Superkraft des Computers
|
|
2
|
+
|
|
3
|
+
Computer werden nicht müde (höchstens mal etwas langsammer).
|
|
4
|
+
|
|
5
|
+
Das hier:
|
|
6
|
+
|
|
7
|
+
```lny
|
|
8
|
+
SOLANGE IST_FREI
|
|
9
|
+
LAUF
|
|
10
|
+
ENDE
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
👉 läuft so lange…
|
|
14
|
+
bis es nicht mehr frei ist.
|
|
15
|
+
|
|
16
|
+
Ob 3-mal oder 3 Milliarden Mal: egal.
|
|
17
|
+
|
|
18
|
+
Und wenn das Feld nie frei wird? Dann werden die Befehle ewig wiederholt. Eventuell bis zum Tag des jüngsten Gericht.
|
|
19
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# 🗂️ Listen – Variablen mit Schubladen
|
|
2
|
+
|
|
3
|
+
Eine Liste ist wie eine Kommode:
|
|
4
|
+
|
|
5
|
+
```lny
|
|
6
|
+
VAR zahlen
|
|
7
|
+
SETZE zahlen << [1, 2, 3, 4]
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
👉 Eine Variable, mehrere Werte.
|
|
11
|
+
|
|
12
|
+
## 🔁 Listen durchlaufen mit FUER
|
|
13
|
+
|
|
14
|
+
```lny
|
|
15
|
+
FUER x IN [1, 2, 3]
|
|
16
|
+
SCHREIB x
|
|
17
|
+
ENDE
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
👉 Der Computer geht jeden Wert durch.
|
|
21
|
+
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# 🔧 Kapitel 6 – Prozeduren
|
|
2
|
+
|
|
3
|
+
## 💡 Warum Prozeduren?
|
|
4
|
+
|
|
5
|
+
Stell dir vor, du musst immer wieder die gleichen Befehle schreiben.
|
|
6
|
+
|
|
7
|
+
👉 Das ist mühsam und fehleranfällig.
|
|
8
|
+
|
|
9
|
+
Prozeduren helfen dir dabei:
|
|
10
|
+
|
|
11
|
+
- Code wiederzuverwenden
|
|
12
|
+
- Programme übersichtlicher zu machen
|
|
13
|
+
- Fehler zu vermeiden
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 🐾 Erste Prozedur
|
|
18
|
+
|
|
19
|
+
```lny
|
|
20
|
+
PROZEDUR geheDreiSchritte
|
|
21
|
+
LAUF
|
|
22
|
+
LAUF
|
|
23
|
+
LAUF
|
|
24
|
+
ENDE
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
👉 Hier definierst du eine neue Prozedur.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## ▶️ Prozedur aufrufen
|
|
32
|
+
|
|
33
|
+
```lny
|
|
34
|
+
geheDreiSchritte
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 🔁 Mehrfach verwenden
|
|
40
|
+
|
|
41
|
+
```lny
|
|
42
|
+
geheDreiSchritte
|
|
43
|
+
geheDreiSchritte
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 🔄 Kombination
|
|
49
|
+
|
|
50
|
+
```lny
|
|
51
|
+
PROZEDUR geheEcke
|
|
52
|
+
LAUF
|
|
53
|
+
DREH_LINKS
|
|
54
|
+
ENDE
|
|
55
|
+
|
|
56
|
+
geheEcke
|
|
57
|
+
geheEcke
|
|
58
|
+
geheEcke
|
|
59
|
+
geheEcke
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
# 🧠 Prozeduren mit Parametern
|
|
65
|
+
|
|
66
|
+
## 💡 Idee
|
|
67
|
+
|
|
68
|
+
Manchmal soll sich eine Prozedur unterschiedlich verhalten.
|
|
69
|
+
|
|
70
|
+
👉 Dafür gibt es **Parameter**.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 🐾 Beispiel
|
|
75
|
+
|
|
76
|
+
```lny
|
|
77
|
+
PROZEDUR geheXSchritte(x)
|
|
78
|
+
SOLANGE x > 0
|
|
79
|
+
LAUF
|
|
80
|
+
SETZE x << x - 1
|
|
81
|
+
ENDE
|
|
82
|
+
ENDE
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## ▶️ Aufruf
|
|
88
|
+
|
|
89
|
+
```lny
|
|
90
|
+
geheXSchritte(3)
|
|
91
|
+
geheXSchritte(5)
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
👉 Lenny läuft unterschiedlich weit!
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## 🔄 Noch ein Beispiel
|
|
99
|
+
|
|
100
|
+
```lny
|
|
101
|
+
PROZEDUR dreheMehrfach(n)
|
|
102
|
+
SOLANGE n > 0
|
|
103
|
+
DREH_LINKS
|
|
104
|
+
SETZE n << n - 1
|
|
105
|
+
ENDE
|
|
106
|
+
ENDE
|
|
107
|
+
|
|
108
|
+
dreheMehrfach(2)
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## 🧠 Vorteil
|
|
114
|
+
|
|
115
|
+
- flexibler Code
|
|
116
|
+
- weniger Wiederholungen
|
|
117
|
+
- mächtiger
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## ⚠️ Typische Fehler
|
|
122
|
+
|
|
123
|
+
- Parameter vergessen
|
|
124
|
+
- falscher Name
|
|
125
|
+
- Wert wird nicht verändert
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## 🎯 Aufgabe 1
|
|
130
|
+
|
|
131
|
+
Was macht das?
|
|
132
|
+
|
|
133
|
+
```lny
|
|
134
|
+
PROZEDUR test(x)
|
|
135
|
+
SCHREIB x
|
|
136
|
+
ENDE
|
|
137
|
+
|
|
138
|
+
test(5)
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## 🎯 Aufgabe 2
|
|
144
|
+
|
|
145
|
+
Schreibe:
|
|
146
|
+
|
|
147
|
+
👉 eine Prozedur, die 4 Schritte läuft
|
|
148
|
+
|
|
149
|
+
(aber mit Parameter!)
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## 🎯 Aufgabe 3 (Bonus)
|
|
154
|
+
|
|
155
|
+
👉 Prozedur für ein Quadrat mit Seitenlänge x
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## 🚀 Fazit
|
|
160
|
+
|
|
161
|
+
Mit Parametern kannst du:
|
|
162
|
+
|
|
163
|
+
- Programme verallgemeinern
|
|
164
|
+
- echte Probleme lösen
|
|
165
|
+
- wie ein Profi programmieren
|
|
166
|
+
|
|
167
|
+
🐶 Lenny wird immer schlauer – dank dir!
|