Kurz: Racket (früher PLT Scheme) ist ein moderner Nachfolger von Scheme und Lisp. Es ist eine „Programmiersprache zum Bauen von Programmiersprachen“: Mit #lang wählt jede Datei ihre Sprache.
Teil des Kurses Racket
Was ist Racket?
Racket (früher PLT Scheme) ist ein moderner Nachfolger von Scheme und Lisp. Es ist eine „Programmiersprache zum Bauen von Programmiersprachen“: Mit #lang wählt jede Datei ihre Sprache; es gibt Sprachen für Anfänger, typisiertes Racket, Datalog, Scribble (Dokumentation) und viele mehr. Racket wird vor allem in der Lehre (How to Design Programs, Bootstrap) und in der Sprachforschung genutzt.
Wie in Lisp ist Code in Klammern geschrieben (S-Ausdrücke), die Standardbibliothek ist aber viel größer: Strings, Hashtabellen, Strukturen, Klassen, Threads, Netzwerk, GUI und Plotten.
Ausführen
racket hallo.rkt # Datei ausführen
racket # interaktive Konsole (REPL)
raco make hallo.rkt # zu Bytecode übersetzen
raco test hallo.rkt # Tests ausführen
raco pkg install <paket> # Paket installieren
drracket # EntwicklungsumgebungDas erste Programm
#lang racket
(displayln "Hallo, Welt!")
(printf "1 + 2 = ~a~n" (+ 1 2))
(display "ohne Zeilenumbruch")
(newline)
(println "println zeigt Anführungszeichen")
(write "write auch")
(newline)
(define name "Mia")
(displayln (string-append "Hallo, " name "!"))
(displayln (format "~a hat ~a Punkte" name 17))Ausgabe:
Hallo, Welt!
1 + 2 = 3
ohne Zeilenumbruch
"println zeigt Anführungszeichen"
"write auch"
Hallo, Mia!
Mia hat 17 PunkteDie erste Zeile #lang racket ist Pflicht. define bindet Namen, printf und format formatieren mit ~a (Anzeige), ~s (Schreibweise) und ~n (Zeilenumbruch).
Zahlen und Arithmetik
Racket kennt Ganzzahlen beliebiger Größe, exakte Brüche, Fließkommazahlen und komplexe Zahlen:
#lang racket
(displayln (+ 1 2 3))
(displayln (/ 10 4))
(displayln (/ 10.0 4))
(displayln (quotient 17 5))
(displayln (remainder 17 5))
(displayln (modulo -7 3))
(displayln (expt 2 100))
(displayln (sqrt 16))
(displayln (sqrt 2))
(displayln (sqrt -4))
(displayln (exact->inexact 1/3))
(displayln (round 2.5))
(displayln (round 3.5))
(displayln (floor 2.7))
(displayln (max 3 9 4))
(displayln (abs -5))
(displayln (inexact->exact (floor 3.9)))
(displayln (number->string 255 16))
(displayln (string->number "ff" 16))
(displayln (integer? 4.0))
(displayln (exact? 1/2))
(displayln (+ 1/3 1/6))Ausgabe:
6
5/2
2.5
3
2
2
1267650600228229401496703205376
4
1.4142135623730951
0+2i
0.3333333333333333
2.0
4.0
2.0
9
5
3
ff
255
#t
#t
1/2Variablen und Funktionen
#lang racket
(define alter 17)
(define pi-naeherung 3.14159)
(define (quadrat x) (* x x))
(define (begruesse name) (string-append "Hallo, " name "!"))
(define verdopple (lambda (x) (* 2 x)))
(displayln (quadrat 7))
(displayln (begruesse "Mia"))
(displayln (verdopple 21))
(let ([a 2] [b 3])
(displayln (+ a b)))
(let* ([x 5] [y (* x 2)])
(displayln (list x y)))
(define (summe . zahlen) (apply + zahlen))
(displayln (summe 1 2 3 4))
(define (grusz name #:gruss [gruss "Hallo"]) (format "~a, ~a!" gruss name))
(displayln (grusz "Tom"))
(displayln (grusz "Tom" #:gruss "Servus"))
(define-values (q r) (quotient/remainder 17 5))
(displayln (list q r))Ausgabe:
49
Hallo, Mia!
42
5
(5 10)
10
Hallo, Tom!
Servus, Tom!
(3 2)Merke
- Jede Racket-Datei beginnt mit
#lang racket - Aufrufe stehen in Klammern:
(funktion arg1 arg2) definebindet Werte und Funktionen,let/let*lokale Namen- Racket rechnet mit großen Ganzzahlen, Brüchen und Fließkommazahlen
Übungsaufgabe
Schreibe eine Funktion, die die Fläche eines Kreises berechnet, und gib sie mit printf aus.
Quiz zur Selbstkontrolle
Welche Zeile steht am Anfang jeder Racket-Datei?
- #lang racket (richtig)
- #include racket
- import racket
- use racket
Was ergibt (/ 10 4) in Racket?
- Den Bruch 5/2 (richtig)
- 2
- 2.5
- Einen Fehler
Wie definiert man eine Funktion?
- (define (name arg) …) (richtig)
- def name(arg)
- function name(arg)
- fn name arg
Weiter im Kurs
Weiter: Kontrollfluss und Listen
Alle Kapitel: Racket im Überblick