Kurz: (define (zeige name wert) (printf “~a an” (~a name #:min-width 22) wert)) (zeige “(string? “a”)” (string? “a”)) (zeige “(symbol? ‘a)” (symbol? ‘a)) (zeige “(list? ’())” (list? ’())) (zeige “(pair? ‘(1))” (pair? ‘(1))) (zeige.
Teil des Kurses Racket
Wichtige Formen und Funktionen
| Zweck | Racket |
|---|---|
| Definition | (define x 5), (define (f a) ...) |
| Funktion | (lambda (x) ...) |
| Bedingung | if, cond, case, when, match |
| Liste | (list 1 2), '(1 2), cons, first, rest |
| Schleife | for, for/list, for/fold |
| Hash | make-hash, hash-ref, hash-set! |
| Struktur | (struct name (feld ...)) |
| Klasse | (class object% ...) |
| Fehler | with-handlers, raise |
| Makro | define-syntax-rule |
| Ausgabe | displayln, printf, format |
#lang racket
(define (zeige name wert) (printf "~a ~a~n" (~a name #:min-width 22) wert))
(zeige "(string? \"a\")" (string? "a"))
(zeige "(symbol? 'a)" (symbol? 'a))
(zeige "(list? '())" (list? '()))
(zeige "(pair? '(1))" (pair? '(1)))
(zeige "(equal? '(1) '(1))" (equal? '(1) '(1)))
(zeige "(eq? 'a 'a)" (eq? 'a 'a))
(zeige "(eqv? 2.0 2.0)" (eqv? 2.0 2.0))
(zeige "(= 1 1.0)" (= 1 1.0))
(zeige "(void)" (void))
(zeige "(length '())" (length '()))
(zeige "(string->symbol \"x\")" (string->symbol "x"))
(zeige "(procedure? car)" (procedure? car))
(zeige "(exact->inexact 22/7)" (exact->inexact 22/7))
(zeige "(string<? \"b\" \"a\")" (string<? "b" "a"))Ausgabe:
(string? "a") #t
(symbol? 'a) #t
(list? '()) #t
(pair? '(1)) #t
(equal? '(1) '(1)) #t
(eq? 'a 'a) #t
(eqv? 2.0 2.0) #t
(= 1 1.0) #t
(void) #<void>
(length '()) 0
(string->symbol "x") x
(procedure? car) #t
(exact->inexact 22/7) 3.142857142857143
(string<? "b" "a") #fTypische Fehler
#lang racket
(displayln (unbekannt 1))Fehlermeldung:
unbekannt: unbound identifier#lang racket
(displayln (+ 1 "2"))Fehlermeldung:
+: contract violationAchtung
Klammern müssen ausgeglichen sein. Ein fehlendes
)führt zu „expected a)to close(“. DrRacket färbt zusammengehörige Klammern ein; ein guter Editor mit Klammerhilfe (Paredit, Rainbow Brackets) ist Gold wert.
Weiterführende Quellen
- docs.racket-lang.org: Guide und Reference
- „How to Design Programs“ (htdp.org): Lehrbuch, kostenlos online
- „Beautiful Racket“ (beautifulracket.com): eigene Sprachen bauen
- „Realm of Racket“ und „The Racket Guide“
Merke
- Racket ist eine moderne Lisp-Variante mit großer Standardbibliothek und Sprachbaukasten
#langbestimmt die Sprache der Datei- Unveränderlichkeit, Rekursion, Makros und Verträge machen Racket zum idealen Lehr- und Forschungswerkzeug
Übungsaufgabe
Baue mit #lang ein kleines Rechner-DSL oder lies das erste Kapitel von “Beautiful Racket”.
Quiz zur Selbstkontrolle
Was macht #lang racket?
- Wählt die Sprache für die Datei (richtig)
- Importiert eine Bibliothek
- Startet DrRacket
- Kommentiert aus
Was ist DrRacket?
- Die Entwicklungsumgebung für Racket (richtig)
- Ein Debugger für C
- Ein Paketmanager
- Ein Compiler für Java
Wofür steht ' vor einer Liste?
- Quote: die Liste wird nicht ausgewertet (richtig)
- Ein Kommentar
- Eine Funktion
- Ein String
Weiter im Kurs
Zurück: Praxisprojekte
Alle Kapitel: Racket im Überblick