Racket (Programmiersprache)

aus Wikipedia, der freien Enzyklopädie
Racket
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
Grafische Ausgabe des Sierpinski-Dreiecks in DrRacket

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

Einzelnachweise