Lisp und Scheme
This commit is contained in:
@@ -52,43 +52,3 @@ Die CPU kann die Daten an der Adresse 1000 anfordern, und der Speicher gibt sie
|
|||||||
| Der Speicher ist flüchtig | Wenn du den Computer ausschaltest, verschwindet alles im RAM |
|
| Der Speicher ist flüchtig | Wenn du den Computer ausschaltest, verschwindet alles im RAM |
|
||||||
| Lesen zerstört keine Daten | Du kannst die Adresse 1000 eine Million Mal lesen, und sie enthält weiterhin denselben Wert |
|
| Lesen zerstört keine Daten | Du kannst die Adresse 1000 eine Million Mal lesen, und sie enthält weiterhin denselben Wert |
|
||||||
| Schreiben überschreibt alte Daten | Wenn du neue Daten an die Adresse 1000 schreibst, sind die alten Daten für immer verschwunden |
|
| Schreiben überschreibt alte Daten | Wenn du neue Daten an die Adresse 1000 schreibst, sind die alten Daten für immer verschwunden |
|
||||||
|
|
||||||
### Register vs. Speicher
|
|
||||||
|
|
||||||
Du hast nun etwas über zwei Orte gelernt, an denen Daten in einem Computer gespeichert werden können:
|
|
||||||
|
|
||||||
- **Register**: winzige Speicherplätze innerhalb der CPU
|
|
||||||
- **Memory (RAM)**: ein riesiges Raster nummerierter Speicherplätze außerhalb der CPU
|
|
||||||
|
|
||||||
Aber warum gibt es zwei Orte? Warum kann die CPU nicht einfach direkt mit dem Speicher arbeiten?
|
|
||||||
|
|
||||||
Die Antwort lautet: Geschwindigkeit. Register sind extrem schnell, weil sie sich innerhalb der CPU befinden. Der Speicher ist langsamer, weil er sich außerhalb befindet. Die CPU kann in einem einzigen Zyklus auf ein Register zugreifen, aber der Zugriff auf den Speicher dauert viel länger.
|
|
||||||
|
|
||||||
**Vergleich nebeneinander:**
|
|
||||||
|
|
||||||
| Merkmal | Register | Speicher (RAM) |
|
|
||||||
| --------------------------- | ------------------------------------------- | ------------------------------------------- |
|
|
||||||
| Position | Innerhalb der CPU | Außerhalb der CPU |
|
|
||||||
| Geschwindigkeit | Extrem schnell (1 Zyklus) | Langsamer (viele Zyklen) |
|
|
||||||
| Anzahl der Speicherplätze | Sehr wenige (16-32 bei x86-64) | Millionen oder Milliarden |
|
|
||||||
| Größe jedes Speicherplatzes | 8 Byte (64 Bit) | 1 Byte |
|
|
||||||
| Wie du auf sie zugreifst | Nach Namen (`rax`, `rbx`, `rcx`...) | Nach Adresse (`1000`, `msg`, `buffer`) |
|
|
||||||
| Flüchtig? | Ja (verschwindet bei ausgeschaltetem Gerät) | Ja (verschwindet bei ausgeschaltetem Gerät) |
|
|
||||||
|
|
||||||
**Die wichtigste Regel in Assembly:**
|
|
||||||
|
|
||||||
> **Die CPU kann nicht direkt mit Daten im memory arbeiten. Daten müssen zuerst in register geladen werden.**
|
|
||||||
|
|
||||||
Dies ist nicht optional. So ist die CPU konzipiert. Jede Addition, jeder Vergleich, jede Datenbewegung muss über ein register erfolgen.
|
|
||||||
|
|
||||||
**Das Drei-Schritte-Muster, das du ständig verwenden wirst:**
|
|
||||||
|
|
||||||
| Schritt | Was passiert | Beispiel |
|
|
||||||
| -------- | --------------------------------------------------------------- | ------------------- |
|
|
||||||
| 1. LOAD | Daten aus dem Speicher in ein Register kopieren | `mov rax, [count]` |
|
|
||||||
| 2. WORK | Etwas mit dem Register tun | `add rax, 5` |
|
|
||||||
| 3. STORE | Das result zurück in den Speicher kopieren (falls erforderlich) | `mov [result], rax` |
|
|
||||||
|
|
||||||
**Was passiert, wenn du diese Regel vergisst?**
|
|
||||||
|
|
||||||
Wenn du versuchst, zwei Zahlen zu addieren, die sich beide im Speicher befinden, gibt der Assembler einen Fehler aus. Die CPU kann das einfach nicht tun. Du musst sie zuerst in Register laden.
|
|
||||||
|
|||||||
+6
-1
@@ -143,7 +143,12 @@
|
|||||||
| `\S` | $\S$ | section |
|
| `\S` | $\S$ | section |
|
||||||
| `\P` | $\P$ | pilcrow |
|
| `\P` | $\P$ | pilcrow |
|
||||||
|
|
||||||
##
|
## Verschiedene Symbole
|
||||||
|
|
||||||
|
| LaTeX | Preview | Typst (Textual) | Typst (Shorthand) |
|
||||||
|
| ------ | ------- | --------------- | ----------------- |
|
||||||
|
| `\Cap` | $\Cap$ | inter.double | |
|
||||||
|
| `\Cup` | $\Cup$ | union.double | |
|
||||||
|
|
||||||
# Temp
|
# Temp
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
# Lisp
|
||||||
|
|
||||||
|
## Variablen
|
||||||
|
|
||||||
|
### Globale Variablen
|
||||||
|
|
||||||
|
#### defparameter
|
||||||
|
|
||||||
|
**`defparameter`**: Definiert eine globale Variable und weist ihr sofort einen Wert zu. Ein erneutes Laden überschreibt den Wert.
|
||||||
|
|
||||||
|
```lisp
|
||||||
|
(defparameter *Variable* Wert)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Beispiel**
|
||||||
|
|
||||||
|
```lisp
|
||||||
|
(defparamter *a* 10)
|
||||||
|
|
||||||
|
defparameter *name* "Otto")
|
||||||
|
|
||||||
|
(+ *a* *b*)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### defvar
|
||||||
|
|
||||||
|
**`defvar`**: Definiert eine globale Variable, setzt den Anfangswert aber nur, wenn sie noch keinen Wert hat. Überschreibt bestehende Werte beim Neuladen *nicht*.
|
||||||
|
|
||||||
|
```lisp
|
||||||
|
(defvar *Variable* Wert )
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### Lokale Variablen
|
||||||
|
|
||||||
|
|
||||||
@@ -18,13 +18,9 @@ A regular expression specifies a set of strings that matches it. This cheat shee
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
`*?` Matches 0 or more repetitions of the preceding RE.
|
`*?` Matches 0 or more repetitions of the preceding RE.
|
||||||
|
|
||||||
+ Greedily matches 1 or more repetitions of the preceding RE.
|
+ Greedily matches 1 or more repetitions of the preceding RE.
|
||||||
|
|
||||||
+? Matches 1 or more repetitions of the preceding RE.
|
+? Matches 1 or more repetitions of the preceding RE.
|
||||||
? Greedily matches 0 or 1 repetitions of the preceding RE.
|
? Greedily matches 0 or 1 repetitions of the preceding RE.
|
||||||
|
|||||||
@@ -920,13 +920,9 @@ next 100 rows only;
|
|||||||
|
|
||||||
##############################################################
|
##############################################################
|
||||||
|
|
||||||
Recap - Parliamentary Election
|
## Recap - Parliamentary Election
|
||||||
|
|
||||||

|
### Challenge
|
||||||
|
|
||||||
Challenge
|
|
||||||
|
|
||||||
Einfach
|
|
||||||
|
|
||||||
> Verfügbare Tabellen und Spalten:
|
> Verfügbare Tabellen und Spalten:
|
||||||
>
|
>
|
||||||
@@ -938,15 +934,49 @@ Das Ergebnis sollte nur die relevanten Sitze enthalten.
|
|||||||
|
|
||||||
Bevor Sie mit der Lösung der Herausforderung beginnen, werfen Sie einen Blick auf die Tabellendaten. **Sie sind nicht sauber**. Die Spalten `is_next_gov` und `is_spoke_bad` enthalten Einsen und Nullen sowie auch yes's und no's.
|
Bevor Sie mit der Lösung der Herausforderung beginnen, werfen Sie einen Blick auf die Tabellendaten. **Sie sind nicht sauber**. Die Spalten `is_next_gov` und `is_spoke_bad` enthalten Einsen und Nullen sowie auch yes's und no's.
|
||||||
|
|
||||||
|
| ministers | | | |
|
||||||
|
| :-------: | ---- | ----------- | ------------ |
|
||||||
|
| | seat | is_next_gov | is_spoke_bad |
|
||||||
|
| 1 | 1 | 0 | 0 |
|
||||||
|
| 2 | 2 | 0 | 1 |
|
||||||
|
| 3 | 3 | yes | no |
|
||||||
|
| 4 | 4 | no | no |
|
||||||
|
| 5 | 5 | 1 | no |
|
||||||
|
| 6 | 6 | yes | no |
|
||||||
|
| 7 | 7 | 1 | no |
|
||||||
|
| 8 | 8 | 0 | yes |
|
||||||
|
| 9 | 9 | 0 | 1 |
|
||||||
|
| 10 | 10 | no | 1 |
|
||||||
|
| 11 | 11 | yes | yes |
|
||||||
|
| 12 | 12 | 1 | 1 |
|
||||||
|
| 13 | 13 | 1 | 1 |
|
||||||
|
| 14 | 14 | 1 | 1 |
|
||||||
|
| 15 | 15 | yes | 0 |
|
||||||
|
| 16 | 16 | 0 | 0 |
|
||||||
|
| 17 | 17 | 0 | 0 |
|
||||||
|
| 18 | 18 | 0 | no |
|
||||||
|
| 19 | 19 | 1 | yes |
|
||||||
|
| 20 | 20 | 1 | no |
|
||||||
|
| 21 | 21 | 0 | 0 |
|
||||||
|
| 22 | 22 | 1 | 0 |
|
||||||
|
| 23 | 23 | yes | 1 |
|
||||||
|
| 24 | 24 | yes | 1 |
|
||||||
|
| 25 | 25 | no | yes |
|
||||||
|
| 26 | 26 | 1 | no |
|
||||||
|
| 27 | 27 | 0 | yes |
|
||||||
|
| 28 | 28 | yes | no |
|
||||||
|
| 29 | 29 | no | 0 |
|
||||||
|
| 30 | 30 | yes | 0 |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
select seat from ministers where (seat % 2 = 0) and (is_spoke_bad = 0 or is_spoke_bad = 'no' )and (is_next_gov = 1 or is_next_gov = 'yes');
|
select seat from ministers where (seat % 2 = 0) and (is_spoke_bad = 0 or is_spoke_bad = 'no' )and (is_next_gov = 1 or is_next_gov = 'yes');
|
||||||
|
|
||||||
##############################################################
|
##############################################################
|
||||||
|
|
||||||
Recap - Police Criminal Arrest
|
## Recap - Police Criminal Arrest
|
||||||
|
|
||||||
Challenge
|
### Challenge
|
||||||
|
|
||||||
Einfach
|
|
||||||
|
|
||||||
> Verfügbare Tabellen und Spalten:
|
> Verfügbare Tabellen und Spalten:
|
||||||
>
|
>
|
||||||
@@ -960,15 +990,37 @@ Ein schwerer Krimineller ist jemand, der alle folgenden Kriterien erfüllt:
|
|||||||
|
|
||||||
Benenne die Spalte als `worst_criminals`.
|
Benenne die Spalte als `worst_criminals`.
|
||||||
|
|
||||||
|
| police_report | | | | |
|
||||||
|
| :-----------: | ----------------- | ------ | ------------- | ------------ |
|
||||||
|
| | name | report | map | severe_score |
|
||||||
|
| 1 | Domingos Holden | VYyPJw | Lockinge | 2 |
|
||||||
|
| 2 | Isabel Enid | | Findochty | 7 |
|
||||||
|
| 3 | Tadgán Musa | FgDqud | Kara's Vale | 10 |
|
||||||
|
| 4 | Filip Baxter | D1rJqH | Kirkwall | 3 |
|
||||||
|
| 5 | Edorta Elias | pQ53RC | Dewsbury | 9 |
|
||||||
|
| 6 | Kəmal Davy | BsI86j | Kara's Vale | 2 |
|
||||||
|
| 7 | Isokrates Bituin | | Findochty | 5 |
|
||||||
|
| 8 | Kassy Ramirus | Pkjv7J | Kirkwall | 7 |
|
||||||
|
| 9 | Doris Blessing | 0kJXq1 | Dalmerlington | 6 |
|
||||||
|
| 10 | Nedeljka Ganesh | EVe9ha | Kara's Vale | 8 |
|
||||||
|
| 11 | Karlene Timotheus | 2HUBHz | Dewsbury | 7 |
|
||||||
|
| 12 | Emerens Raman | PAGdHl | Findochty | 1 |
|
||||||
|
| 13 | Mijo Ambrosios | | Luton | 5 |
|
||||||
|
| 14 | Karlene Jairus | 4Z63Q5 | Dalmerlington | 8 |
|
||||||
|
| 15 | Khordad Peter | | Findochty | 2 |
|
||||||
|
| 16 | Biagio Mai | | Findochty | 9 |
|
||||||
|
| 17 | Liwen Sigiward | B51ETs | Mansfield | 3 |
|
||||||
|
| 18 | Svante Mona | DC0kGh | Caerleon | 5 |
|
||||||
|
| 19 | Kshitija Ladislav | cSA0hA | Caerleon | 2 |
|
||||||
|
| 20 | Ha-Eun Tatiana | YNYhHV | Kara's Vale | 4 |
|
||||||
|
|
||||||
select name as worst_criminals from police_report where (report like '%g%' or report like '%b%' or report is null ) and map in ('Caerleon', 'Dewsbury', 'Kirkwall', 'Findochty') order by severe_score desc limit 5
|
select name as worst_criminals from police_report where (report like '%g%' or report like '%b%' or report is null ) and map in ('Caerleon', 'Dewsbury', 'Kirkwall', 'Findochty') order by severe_score desc limit 5
|
||||||
|
|
||||||
##############################################################
|
##############################################################
|
||||||
|
|
||||||
Recap - Bar Beverage Container
|
## Recap - Bar Beverage Container
|
||||||
|
|
||||||
Challenge
|
### Challenge
|
||||||
|
|
||||||
Einfach
|
|
||||||
|
|
||||||
> Verfügbare Tabellen und Spalten:
|
> Verfügbare Tabellen und Spalten:
|
||||||
>
|
>
|
||||||
@@ -992,3 +1044,85 @@ Führen Sie diese Schritte aus:
|
|||||||
- Dringendste zuerst (älteste abgelaufene Säfte)
|
- Dringendste zuerst (älteste abgelaufene Säfte)
|
||||||
- Dann fast abgelaufene Säfte
|
- Dann fast abgelaufene Säfte
|
||||||
- Verwenden Sie (current_year - expiration_year) zum Sortieren
|
- Verwenden Sie (current_year - expiration_year) zum Sortieren
|
||||||
|
|
||||||
|
| beverages | | | |
|
||||||
|
| :-------: | ---- | ------------ | --------------- |
|
||||||
|
| | id | current_year | expiration_year |
|
||||||
|
| 1 | 145 | 2013 | 2014 |
|
||||||
|
| 2 | 156 | 2001 | 2015 |
|
||||||
|
| 3 | 167 | 2009 | 2004 |
|
||||||
|
| 4 | 178 | 2005 | 2000 |
|
||||||
|
| 5 | 124 | 2013 | 2006 |
|
||||||
|
| 6 | 189 | 2002 | 2014 |
|
||||||
|
| 7 | 198 | 2007 | 2013 |
|
||||||
|
| 8 | 201 | 2004 | 2007 |
|
||||||
|
| 9 | 206 | 2000 | 2000 |
|
||||||
|
| 10 | 112 | 2011 | 2002 |
|
||||||
|
| 11 | 209 | 2008 | 2004 |
|
||||||
|
| 12 | 125 | 2015 | 2012 |
|
||||||
|
| 13 | 980 | 2008 | 2005 |
|
||||||
|
| 14 | 402 | 2010 | 2011 |
|
||||||
|
| 15 | 391 | 2008 | 2009 |
|
||||||
|
| 16 | 144 | 2015 | 2013 |
|
||||||
|
| 17 | 213 | 2014 | 2007 |
|
||||||
|
| 18 | 100 | 2001 | 2000 |
|
||||||
|
| 19 | 145 | 2002 | 2004 |
|
||||||
|
| 20 | 981 | 2011 | 2014 |
|
||||||
|
| 21 | 210 | 2002 | 2007 |
|
||||||
|
| 22 | 392 | 2010 | 2006 |
|
||||||
|
| 23 | 393 | 2007 | 2013 |
|
||||||
|
| 24 | 113 | 2010 | 2002 |
|
||||||
|
| 25 | 255 | 2001 | 2008 |
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT id as to_renew
|
||||||
|
FROM beverages
|
||||||
|
WHERE current_year - expiration_year > 6 OR current_year = expiration_year OR expiration_year = current_year + 1
|
||||||
|
ORDER by current_year-expiration_year DESC
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Wiederholung – Neue Spalten erstellen
|
||||||
|
|
||||||
|
### Challenge
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
> Verfügbare Tabellen und Spalten:
|
||||||
|
>
|
||||||
|
> - `items`**:** `id`
|
||||||
|
|
||||||
|
Eine quartische Funktion ist definiert:
|
||||||
|
|
||||||
|
```
|
||||||
|
f(x) = ax4+bx3+cx2+dx+e
|
||||||
|
```
|
||||||
|
|
||||||
|
Definieren wir die konstanten Parameter:
|
||||||
|
|
||||||
|
- `a = 3`
|
||||||
|
- `b = 5`
|
||||||
|
- `c = 0.9`
|
||||||
|
- `d = 2.2`
|
||||||
|
- `e = 1`
|
||||||
|
|
||||||
|
Rufe die IDs und die quartische Funktion ab, wobei x die ID ist, und benenne die Spalte in `quartic` um.
|
||||||
|
|
||||||
|
> Verwende keine integrierten Funktionen wie `POWER()`!
|
||||||
|
|
||||||
|
Um die Potenz von 2 oder die Potenz von 3 zu berechnen, verwende das folgende Beispiel:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
a*a
|
||||||
|
-- Potenz von 2
|
||||||
|
|
||||||
|
a*a*a
|
||||||
|
-- Potenz von 3
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
`select id , (3*id*id*id*id + 5*id*id*id + 0.9*id*id + 2.2 * id +1 )as quartic from items`
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
# Scheme
|
||||||
|
|
||||||
|
## Definition von Variablen
|
||||||
|
|
||||||
|
### Globale Variablen
|
||||||
|
|
||||||
|
```scheme
|
||||||
|
(define variablenname wert)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Beispiel:
|
||||||
|
|
||||||
|
```scheme
|
||||||
|
(define a 10)
|
||||||
|
|
||||||
|
(define name "Otto")
|
||||||
|
```
|
||||||
@@ -183,3 +183,54 @@ a ist nur Beispiel
|
|||||||
### Mehrfaches Ausführen
|
### Mehrfaches Ausführen
|
||||||
|
|
||||||
100@a
|
100@a
|
||||||
|
|
||||||
|
# Aus alter Datei
|
||||||
|
|
||||||
|
## Bestimmte Phrasen in Kleinbuchstaben umwandeln
|
||||||
|
|
||||||
|
```
|
||||||
|
:%s/\(Zum Beispiel[^.!?]*[.!?]\)/\L\1/g
|
||||||
|
```
|
||||||
|
|
||||||
|
**Erläuterung:**
|
||||||
|
|
||||||
|
- `:%s/…/…/g` – Sucht und ersetzt global in der ganzen Datei.
|
||||||
|
- `\(…\)` – Gruppiert den Treffer, um ihn als `\1` später referenzieren zu können.
|
||||||
|
- `Zum Beispiel` – Die Zielphrase am Satzanfang.
|
||||||
|
- `[^.!?]*` – Beliebig viele Zeichen, bis zu einem Satzendezeichen.
|
||||||
|
- `[.!?]` – Der Satz endet mit Punkt, Ausrufezeichen oder Fragezeichen.
|
||||||
|
- `\L\1` – Wandelt den Inhalt von `\1` (dem gefundenen Satzteil) in Kleinbuchstaben um
|
||||||
|
|
||||||
|
## Jede leere Zeile löschen
|
||||||
|
|
||||||
|
```
|
||||||
|
:g/^$/d
|
||||||
|
```
|
||||||
|
|
||||||
|
- `:g` – Wendet den Befehl auf alle Zeilen an, die einem Muster entsprechen.
|
||||||
|
- `^$` – Das Muster für eine leere Zeile: Zeilenanfang (^) gefolgt von Zeilenende ($), also nichts dazwischen.
|
||||||
|
- `d` – Löscht die jeweilige Zeile.
|
||||||
|
|
||||||
|
oder aber **alternativ**:
|
||||||
|
|
||||||
|
- mit `v` —> nicht passende Zeilen behalten, so also `:v/\S/d`
|
||||||
|
- `\S` bedeutet nicht-Leerzeichen
|
||||||
|
|
||||||
|
oder
|
||||||
|
|
||||||
|
- mit `:g/^\s*$/d`
|
||||||
|
- `:g` → global: wende auf alle Zeilen an, die passen
|
||||||
|
- `^\s*$` → Zeilen, die nur aus Leerzeichen/Tabs (oder gar nichts) bestehen
|
||||||
|
- `d` → lösche diese Zeilen
|
||||||
|
|
||||||
|
|
||||||
|
## Zeile in ein Register kopieren
|
||||||
|
|
||||||
|
- `”ayy`
|
||||||
|
|
||||||
|
## Zeile aus einem Register einfügen
|
||||||
|
|
||||||
|
- `<ESC>”ap`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user