Kurz: (define s “Hallo Racket”) (displayln (string-length s)) (displayln (string-upcase s)) (displayln (substring s 6 12)) (displayln (string-ref s 0)) (displayln (string-append s ”!” ”!”)) (displayln (string-split “a,b,,c” ”,”)).
Teil des Kurses Racket
Strings und Zeichen
#lang racket
(define s "Hallo Racket")
(displayln (string-length s))
(displayln (string-upcase s))
(displayln (substring s 6 12))
(displayln (string-ref s 0))
(displayln (string-append s "!" "!"))
(displayln (string-split "a,b,,c" ","))
(displayln (string-join '("x" "y" "z") "-"))
(displayln (string-replace "aXbXc" "X" "+"))
(displayln (string-trim " mitte "))
(displayln (string-contains? s "Rack"))
(displayln (string-prefix? s "Hallo"))
(displayln (string->list "abc"))
(displayln (list->string (list #\x #\y)))
(displayln (string->number "42"))
(displayln (number->string 3.5))
(displayln (string<? "a" "b"))
(displayln (string=? "x" "x"))
(displayln (char-upcase #\a))
(displayln (char->integer #\A))
(displayln (integer->char 66))
(displayln (regexp-match #rx"[0-9]+" "ab123cd"))
(displayln (regexp-match* #px"\\d+" "a1b22c333"))
(displayln (regexp-replace* #rx"[aeiou]" "Racket" "*"))
(displayln (string-titlecase "hallo welt"))
(displayln (~a "Wert: " 42 " " 'sym))
(displayln (~r 3.14159 #:precision 2))
(displayln (~a 7 #:min-width 4 #:align 'right #:pad-string "0"))Ausgabe:
12
HALLO RACKET
Racket
H
Hallo Racket!!
(a b c)
x-y-z
a+b+c
mitte
#t
#t
(a b c)
xy
42
3.5
#t
#t
A
65
B
(123)
(1 22 333)
R*ck*t
Hallo Welt
Wert: 42 sym
3.14
0007Vektoren
#lang racket
(define v (vector 5 3 9 1))
(displayln v)
(vector-set! v 0 50)
(displayln (vector-ref v 0))
(displayln (vector-length v))
(displayln (vector->list v))
(displayln (vector-map add1 v))
(displayln (make-vector 3 0))
(vector-sort! v <)
(displayln v)
(displayln (vector-argmin identity v))
(define m (for/vector ([i 2]) (for/vector ([j 3]) (* i j))))
(displayln m)
(displayln (vector-ref (vector-ref m 1) 2))Ausgabe:
#(5 3 9 1)
50
4
(50 3 9 1)
#(51 4 10 2)
#(0 0 0)
#(1 3 9 50)
1
#(#(0 0 0) #(0 1 2))
2Hashtabellen
#lang racket
(define h (make-hash))
(hash-set! h "Mia" 17)
(hash-set! h "Tom" 25)
(displayln (hash-ref h "Mia"))
(displayln (hash-ref h "Ben" 0))
(displayln (hash-ref h "Zoe" (lambda () "fehlt")))
(displayln (hash-count h))
(displayln (hash-has-key? h "Tom"))
(hash-update! h "Mia" add1)
(displayln (hash-ref h "Mia"))
(hash-remove! h "Tom")
(displayln (sort (hash-keys h) string<?))
(define unveraenderlich (hash 'a 1 'b 2))
(define neu (hash-set unveraenderlich 'c 3))
(displayln (hash-count unveraenderlich))
(displayln (hash-count neu))
(displayln (sort (hash->list neu) (lambda (x y) (symbol<? (car x) (car y)))))
(define zaehler
(for/fold ([z (hash)]) ([c "mississippi"])
(hash-update z c add1 0)))
(displayln (sort (hash->list zaehler) char<? #:key car))Ausgabe:
17
0
fehlt
2
#t
18
(Mia)
2
3
((a . 1) (b . 2) (c . 3))
((i . 4) (m . 1) (p . 2) (s . 4))Strukturen
#lang racket
(struct person (name alter))
(struct punkt (x y) #:transparent)
(struct konto (inhaber [stand #:mutable]) #:transparent)
(define p (person "Mia" 17))
(displayln (person-name p))
(displayln (person? p))
(define a (punkt 1 2))
(displayln a)
(displayln (equal? a (punkt 1 2)))
(define k (konto "Mia" 100))
(set-konto-stand! k 150)
(displayln k)
(displayln (struct-copy punkt a [x 10]))
(define (beschreibe f)
(match f
[(punkt 0 0) "Ursprung"]
[(punkt x 0) (format "auf der x-Achse bei ~a" x)]
[(punkt x y) (format "Punkt ~a/~a" x y)]
[_ "unbekannt"]))
(displayln (map beschreibe (list (punkt 0 0) (punkt 3 0) (punkt 1 2) 42)))Ausgabe:
Mia
#t
#(struct:punkt 1 2)
#t
#(struct:konto Mia 150)
#(struct:punkt 10 2)
(Ursprung auf der x-Achse bei 3 Punkt 1/2 unbekannt)Merke
- Strings:
string-append,string-split,string-join,regexp-match,~a,~r - Vektoren sind veränderlich mit schnellem Indexzugriff
- Hashtabellen gibt es veränderlich (
make-hash) und unveränderlich (hash) structdefiniert Datentypen;matchzerlegt sie
Übungsaufgabe
Zähle mit einer Hashtabelle die Wörter eines Satzes.
Quiz zur Selbstkontrolle
Wie legt man ein veränderliches Hash an?
- (make-hash) (richtig)
- (hash)
- {}
- (new Hash)
Was bewirkt #:transparent bei struct?
- Gleichheit und Ausgabe zeigen die Felder (richtig)
- Die Struktur wird unsichtbar
- Sie wird schneller
- Sie wird veränderlich
Wie liest man ein Hash-Element mit Standardwert?
- (hash-ref h schluessel standardwert) (richtig)
- h[schluessel]
- (get h schluessel)
- h.get(…)
Weiter im Kurs
Zurück: Kontrollfluss und Listen
Weiter: Funktionen höherer Ordnung und Makros
Alle Kapitel: Racket im Überblick