www.wikidata.de-de.nina.az
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 RacketBasisdatenParadigmen multi paradigmatischErscheinungsjahr 2010 PLT Scheme 1994 Designer PLT Inc Entwickler PLT Inc Typisierung dynamisch statischDialekte Typed Racket Lazy Racket Scribble FrTimeStandardisierungen R5RS R6RSBeeinflusst von SchemeBetriebssystem Linux macOS FreeBSD WindowsLizenz LGPL MIT Apacheracket lang org2018 erhielt Racket den Programming Languages Software Award von ACM SIGPLAN In der Laudatio wurde Rackets singulare Bedeutung sowohl fur Forschung als auch Lehre von Programmiersprachen uber 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 hoherer Ordnung DrRacket fand Verbreitung in Einfuhrungskursen zu Programmiersprachen und bei neueren Lehrbuchern 2 3 Racket ist Open Source Software unter GNU Lesser General Public License bzw MIT Lizenz und Apache Lizenz 4 Inhaltsverzeichnis 1 Code Beispiele 2 Sprachorientierte Programmierung 3 Weblinks 4 EinzelnachweiseCode Beispiele BearbeitenDas 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 unterstutzt 5 lang typed racket define liste Listof Integer 1 2 3 4 5 Typfestlegung der Liste quadrieren gt 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 gt liste Listof Integer 1 2 3 4 5 gt quadrieren gt Integer Integer lt procedure quadrieren gt Ausschnitt einer Markdown Vorlagen Datei cv md pp fur 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 nbsp Grafische Ausgabe des Sierpinski Dreiecks in DrRacketGenerierung 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 Sprachorientierte Programmierung BearbeitenIn Racket steht die Erzeugung von domanenspezifischen Sprachen oder Allzwecksprachen im Mittelpunkt Jede Sprache die in Racket implementiert wird muss zwei Bestandteile aufweisen einen sog Reader der vereinfacht ausgedruckt den Quellcode einliest und einen sog Expander der den Quellcode interpretiert 7 Fur eine Sprache minilang fur Mini Sprache konnte der Reader beispielsweise wie folgt aussehen lang racket define read syntax path port define code zeilen port gt lines port Einlesen des Codes module module name racket base Modul als Syntax Objekt anlegen Expander racket base for code zeile list code zeilen Code Zeilen einspleissen und for Schleife anlegen writeln code zeile Code Zeilen auf Terminal ausgeben provide read syntax read syntax zur Verfugung stellen Dieser liest den Code zeilenweise ein und erzeugt ein Syntax Objekt mit in das die Zeilen als Strings in eine Liste in der for Schleife eingespleisst werden d h sie werden unter Eliminieren einer Listenebene eingefugt list 1 2 list 3 4 5 gt list 1 2 3 4 5 Danach werden diese der Reihe nach an das Terminal ausgegeben Der Reader muss in jedem Fall die Funktion read syntax zur Verfugung stellen Nun speichert man den Code in einer Datei minilang rkt und legt anschliessend eine Datei testminilang rkt im selben Verzeichnis mit dem Inhalt lang reader minilang rkt ab cd ef an Diese kann man nun in DrRacket oder mit racket testminilang rkt ausfuhren und es werden alle Zeilen am Terminal ausgegeben ab cd ef Hier ist zu beachten dass der Reader nur das Syntax Objekt zuruckgibt der Code selbst aber erst spater ausgefuhrt wird Wenn die Strings der Code Zeilen modifiziert werden sollen beispielsweise um Vorformatierungen vorzunehmen dann kann man das Einspleissen im Syntax Objekt verandern Dies konnte zum Beispiel so aussehen lang racket define read syntax path port define code zeilen port gt lines port define veraenderte code zeilen map lambda s veraendere s Strings mit Prafix veraendere versehen code zeilen module module name minilang2 expander rkt Eigenen Expander verwenden for code zeile list veraenderte code zeilen writeln code zeile provide read syntax Hier werden die Strings aus den Code Zeilen mit einem Prafix veraendere versehen und als Liste von Datums Objekten gespeichert Diese Liste wird in die Schleife innerhalb des Syntax Objekts eingespleisst Das bedeutet dass jeder String mit einer Funktion veraendere aufgerufen wird Diese wird im Expander minilang2 expander rkt implementiert der auch wieder im selben Verzeichnis gespeichert wird lang racket define veraendere s Funktion String gt String string append veraendert s string gt veraendert string provide veraendere Stelle Funktion veraendere zur Verfugung Fuhrt man das testminilang rkt von oben mit dem veranderten Reader aus erhalt man die Ausgabe veraendert veraendert veraendert ab veraendert cd veraendert ef Der gezeigte Reader erzeugt eine Terminalausgabe wenn man die Quelldatei testminilang rkt ausfuhrt Es ist aber auch moglich mit Hilfe von require solche Module in anderen Code einzubinden Dazu konnte man im vorliegenden Beispiel das Syntax Objekt wie folgt modifizieren module module name minilang2 expander rkt define export daten list veraenderte code zeilen provide export daten Hier werden die erzeugten Strings in einer Liste export daten gespeichert und zur Verfugung gestellt Bindet man nun das Programm testminilang rkt wie folgt ein lang racket require testminilang rkt writeln export daten veraendert veraendert veraendert ab veraendert cd veraendert ef kann man auf export daten zugreifen die hier auf das Terminal ausgegeben werden In den vorangegangenen Beispielen ist eine Art Syntax und Semantik implementiert worden Oft wird in Racket die Syntax nur leicht modifiziert weiterhin sog S Expressions aber neue Funktionalitat mit Hilfe von Makros hinzugefugt Diese dienen dazu Syntax Objekte ineinander zu transformieren Hier spielen auch die verschiedenen Phasen Phase 0 Laufzeitphase Phasen gt 0 displaystyle gt 0 nbsp Ubersetzungsphasen in Racket eine Rolle in die man ebenfalls eingreifen kann Wenn man neue Syntax abseits von S Expressions einfuhrt ist es oft einfacher das Einlesen im Reader in mehrere Schritte zu unterteilen Dies sind im Einzelnen das Zerlegen des Eingabestrings in irreduzible Elemente der Sprache Tokenizer Lexer und das Prufen und Umwandeln dieser Elemente in das Syntax Objekt entsprechend einer Grammatik Parser Dies wird in der zitierten Literatur ausfuhrlich dargestellt Weblinks BearbeitenOffizielle Website englisch Einzelnachweise Bearbeiten ACM Sigplan Programming Languages Software Award How to Design Programs DeinProgramm Racket License Notice The Typed Racket Guide Pollen the book is a program Beau tiful Racket an intro duc tion to language oriented program ming using Racket Abgerufen von https de wikipedia org w index php title Racket Programmiersprache amp oldid 231054715