Racket (Programmiersprache)
Racket | |
---|---|
Datei:Racket logo.png | |
Basisdaten | |
Paradigmen: | multi-paradigmatisch |
Erscheinungsjahr: | 2010 (PLT Scheme 1994) |
Designer: | PLT Inc. |
Entwickler: | PLT Inc. |
Typisierung: | dynamisch, statisch |
Dialekte: | Typed Racket, Lazy Racket, Scribble, FrTime |
Standardisierungen: | R5RS, R6RS |
Beeinflusst von: | Scheme |
Betriebssystem: | Linux, macOS, FreeBSD, Windows |
Lizenz: | LGPL, MIT, Apache |
racket-lang.org |
Racket ist eine multi-paradigmatische Programmiersprache aus der Lisp-Scheme-Familie. Sie ist Nachfolger des Scheme-Dialekts PLT Scheme. Racket besitzt eine integrierte Entwicklungsumgebung (IDE), DrRacket, und eine umfangreiche Bibliothek.
2018 erhielt Racket den Programming Languages Software Award von ACM SIGPLAN. In der Laudatio wurde Rackets singuläre Bedeutung sowohl für Forschung als auch Lehre von Programmiersprachen über rund zwanzig Jahre hervorgehoben.[1] Racket ist eine Programmiersprache zur Erzeugung und Erweiterung (Language Extensibility) von Programmiersprachen. Es spielt eine wichtige Rolle in der Forschung zu rekursiven Modulen 1. Klasse, Gradual Typing, Functional Reactive Programming und Kontrakten höherer Ordnung. DrRacket fand Verbreitung in Einführungskursen zu Programmiersprachen und bei neueren Lehrbüchern.[2][3]
Racket ist Open-Source-Software unter GNU Lesser General Public License bzw. MIT-Lizenz und Apache-Lizenz.[4]
Code-Beispiele
Das klassische Hallo-Welt-Programm:
#lang racket/base
"Hello, World!"
Quadrieren einer Liste in der Basissprache racket/base
(dynamische Typisierung):
#lang racket/base
(define liste '(1 2 3 4 5)) ; Typ der Liste wird zur Laufzeit ermittelt
(define (quadrieren x) ; Keine Typfestlegung der Funktion "quadrieren"
(* x x)) ; Fehler werden erst zur Laufzeit festgestellt
(displayln (map quadrieren liste)) ; (1 4 9 16 25)
Quadrieren einer Liste im Dialekt typed/racket
, der statische Typisierung unterstützt:[5]
#lang typed/racket
(define liste : (Listof Integer) '(1 2 3 4 5)) ; Typfestlegung der Liste
(: quadrieren (-> Integer Integer)) ; Typfestlegung der Funktion "quadrieren"
(define (quadrieren x)
(* x x))
(displayln (map quadrieren liste)) ; (1 4 9 16 25)
Durch Nutzung von typed/racket
zeigt DrRacket in der REPL (Read-Eval-Print-Loop, eine Art Eingabeaufforderung) Typinformationen an:
> liste
- : (Listof Integer)
'(1 2 3 4 5)
> quadrieren
- : (-> Integer Integer)
#<procedure:quadrieren>
Ausschnitt einer Markdown-Vorlagen-Datei cv.md.pp
für das Textsatzsystem Pollen
:[6]
#lang pollen
◊(define beruf "Arzt")
◊(define wohnort "Berlin")
◊(define kinder (* 2 2))
Mein Name ist _Max_ _Mustermann_,
* ich bin von Beruf ◊beruf
* wohne in ◊wohnort
* habe ◊kinder Kinder
In der entsprechenden Markdown-Datei cv.md
steht dann
Mein Name ist _Max_ _Mustermann_,
* ich bin von Beruf Arzt
* wohne in Berlin
* habe 4 Kinder
Generierung eines Sierpinski-Dreiecks:
#lang racket
(require 2htdp/image)
(let sierpinski ([n 8])
(if (zero? n)
(triangle 2 'solid 'red)
(let ([t (sierpinski (- n 1))])
(freeze (above t (beside t t))))))
Die grafische Ausgabe des Sierpinski-Dreiecks ist in der Abbildung rechts dargestellt.
Weblinks
- Offizielle Website (englisch)