Kurz: (define al ‘((a . 1) (b . 2) (c . 3))) (zeige (cdr (assq ‘b al))) (zeige (assq ‘z al)) (zeige (map car al)) (zeige (map cdr al))
Teil des Kurses Scheme
Strings und Zeichen
(use-modules (srfi srfi-13))
(define (zeige x) (display x) (newline))
(define s "Hallo Scheme")
(zeige (string-length s))
(zeige (string-upcase s))
(zeige (string-downcase s))
(zeige (substring s 6 12))
(zeige (string-ref s 0))
(zeige (string-append s "!" "!"))
(zeige (string->list "abc"))
(zeige (list->string (list #\x #\y)))
(zeige (string->number "42"))
(zeige (number->string 3.5))
(zeige (string<? "a" "b"))
(zeige (string=? "x" "x"))
(zeige (string-index s #\S))
(zeige (string-contains s "Sch"))
(zeige (string-join '("a" "b" "c") "-"))
(zeige (string-reverse "Scheme"))
(zeige (string-pad "7" 3 #\0))
(zeige (char-upcase #\a))
(zeige (char->integer #\A))
(zeige (integer->char 66))
(zeige (string->symbol "wort"))
(zeige (symbol->string 'wort))
(zeige (char-numeric? #\5))
(zeige (string-split "a,b,c" #\,))
(zeige (string-trim " x "))
(zeige (string-map char-upcase "abc"))
(zeige (list-tail (string->list "hallo") 3))
(zeige (string-count "banane" #\a))Ausgabe:
12
HALLO SCHEME
hallo scheme
Scheme
H
Hallo Scheme!!
(a b c)
xy
42
3.5
#t
#t
6
6
a-b-c
emehcS
007
A
65
B
wort
wort
#t
(a b c)
x
ABC
(l o)
2Vektoren
(define (zeige x) (display x) (newline))
(define v (vector 5 3 9 1))
(zeige v)
(vector-set! v 0 50)
(zeige (vector-ref v 0))
(zeige (vector-length v))
(zeige (vector->list v))
(zeige (list->vector '(1 2 3)))
(zeige (make-vector 3 0))
(zeige (list->vector (map (lambda (x) (* x x)) (vector->list #(1 2 3)))))
(for-each (lambda (x) (display x) (display ",")) (vector->list #(1 2 3)))
(newline)
(vector-fill! v 7)
(zeige v)
(zeige (vector-copy #(1 2 3)))
(define m (vector (make-vector 3 0) (make-vector 3 1)))
(zeige m)Ausgabe:
#(5 3 9 1)
50
4
(50 3 9 1)
#(1 2 3)
#(0 0 0)
#(1 4 9)
1,2,3,
#(7 7 7 7)
#(1 2 3)
#(#(0 0 0) #(1 1 1))Hashtabellen und Assoziationslisten
(define (zeige x) (display x) (newline))
(define h (make-hash-table))
(hash-set! h 'mia 17)
(hash-set! h 'tom 25)
(zeige (hash-ref h 'mia))
(zeige (hash-ref h 'ben 0))
(zeige (hash-count (lambda (k v) #t) h))
(hash-set! h 'mia (+ 1 (hash-ref h 'mia)))
(zeige (hash-ref h 'mia))
(hash-remove! h 'tom)
(zeige (hash-map->list (lambda (k v) (cons k v)) h))
(define al '((a . 1) (b . 2) (c . 3)))
(zeige (cdr (assq 'b al)))
(zeige (assq 'z al))
(zeige (map car al))
(zeige (map cdr al))
(define zaehler (make-hash-table))
(for-each (lambda (c) (hash-set! zaehler c (+ 1 (hash-ref zaehler c 0))))
(string->list "mississippi"))
(zeige (sort (hash-map->list cons zaehler) (lambda (a b) (char<? (car a) (car b)))))Ausgabe:
17
0
2
18
((mia . 18))
2
#f
(a b c)
(1 2 3)
((i . 4) (m . 1) (p . 2) (s . 4))Records
(use-modules (srfi srfi-9))
(define (zeige x) (display x) (newline))
(define-record-type person
(make-person name alter)
person?
(name person-name)
(alter person-alter set-person-alter!))
(define p (make-person "Mia" 17))
(zeige (person-name p))
(zeige (person? p))
(zeige (person? 42))
(set-person-alter! p 18)
(zeige (person-alter p))
(define (altersgruppe pers)
(cond ((< (person-alter pers) 13) "Kind")
((< (person-alter pers) 18) "Jugendlicher")
(else "Erwachsener")))
(zeige (map altersgruppe (list (make-person "A" 5) (make-person "B" 15) p)))Ausgabe:
Mia
#t
#f
18
(Kind Jugendlicher Erwachsener)Merke
- Strings, Zeichen und Symbole sind verschiedene Datentypen
- Vektoren haben schnellen Indexzugriff, Hashtabellen und Assoziationslisten ordnen Schlüssel zu
define-record-type(SRFI 9) definiert Datensätze- Guile ergänzt den Standard um viele Hilfsfunktionen (
string-join,string-split, …)
Übungsaufgabe
Zähle mit einer Hashtabelle die Wörter eines Satzes.
Quiz zur Selbstkontrolle
Wie legt man einen Vektor an?
- (vector 1 2 3) oder #(1 2 3) (richtig)
- [1, 2, 3]
- (array 1 2 3)
- {1, 2, 3}
Was liefert (symbol->string 'abc)?
- “abc” (richtig)
- ‘abc
- abc als Zahl
- Fehler
Wofür steht define-record-type?
- Definition eines Datensatztyps (richtig)
- Definition einer Funktion
- Definition eines Makros
- Import eines Moduls
Weiter im Kurs
Zurück: Kontrollfluss, Listen und Rekursion
Weiter: Funktionen höherer Ordnung und Closures
Alle Kapitel: Scheme im Überblick