| Racket | |
|---|---|
| Paradigma | Multiparadigma: funcional, procedural , modular, orientada à objetos, lógica, reflexiva, meta |
| Surgido em | 1994 |
| Última versão | 8.12 (08-02-2024) |
| Criado por | PLT Inc. |
| Estilo de tipagem | dinâmica, forte, estática |
| Dialetos | Typed Racket, Lazy Racket, Scribble, FrTime, mais |
| Influenciada por | Scheme, Eiffel |
| Influenciou | Scheme |
| Licença | LGPL |
| Página oficial | racket-lang.org |
Racket (anteriormente denominada PLT Scheme) é uma linguagem de programação multiparadigma que suporta programação funcional e procedural. Pertence a família de linguagens Scheme/Lisp. Um dos objetivos do projeto é servir como uma plataforma para a criação de linguagem, design e implementação. A linguagem é utilizada numa variedade de contextos, tais como scripting, programação de uso geral, a educação de ciência da computação e pesquisa.
A plataforma fornece uma implementação da linguagem Racket (incluindo um sofisticado sistema run-time várias bibliotecas, JIT, e mais) juntamente com um ambiente de desenvolvimento chamado DrRacket (anteriormente denominado DrScheme) escrito em Racket ele mesmo. A IDE e um currículo que acompanha a programação são usados no programa de extensão ProgramByDesign, uma tentativa de transformar a computação e programação em "uma parte indispensável do currículo de artes liberais". O núcleo da linguagem é conhecido por seu sistema de macro extensivo que permite a criação de linguagens embutidas e específicas de domínio, construções de linguagem, como classes ou módulos, e dialetos distintos de Racket com diferentes semânticas.
Aqui está um programa trivial "Olá mundo":
#lang racket
"Olá mundo!"
A execução deste programa produz o resultado:
Aqui está um programa um pouco menos trivial:

#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))))))
Este programa, a partir do Racket website, desenha um triângulo de Sierpinski, aninhado em profundidade 8.
Usando a diretiva #lang, um arquivo de origem pode ser escrito em diferentes dialetos do Racket. Aqui está um exemplo do programa de fatorial em Typed Racket, um dialeto de tipagem estática de Racket:
#lang typed/racket
(: fact (Integer -> Integer))
(define (fact n)
(cond [(zero? n) 1]
[else (* n (fact (- n 1)))]))