EMZETT.
Login

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

Kapitel 8 von 8 im Kurs Racket. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

Wichtige Formen und Funktionen

ZweckRacket
Definition(define x 5), (define (f a) ...)
Funktion(lambda (x) ...)
Bedingungif, cond, case, when, match
Liste(list 1 2), '(1 2), cons, first, rest
Schleifefor, for/list, for/fold
Hashmake-hash, hash-ref, hash-set!
Struktur(struct name (feld ...))
Klasse(class object% ...)
Fehlerwith-handlers, raise
Makrodefine-syntax-rule
Ausgabedisplayln, 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")     #f

Typische Fehler

#lang racket
(displayln (unbekannt 1))

Fehlermeldung:

unbekannt: unbound identifier
#lang racket
(displayln (+ 1 "2"))

Fehlermeldung:

+: contract violation

Achtung

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
  • #lang bestimmt 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

Weiter im Kurs

Zurück: Praxisprojekte

Alle Kapitel: Racket im Überblick