래킷 (프로그래밍 언어)

래킷(Racket, 이전 이름: PLT Scheme)은 리스프-스킴 계열의 범용 프로그래밍 패러다임이다. 설계적 목표 중 하나는 언어 제작, 설계, 구현의 플랫폼의 역할을 하는 것이다. 이 언어는 스크립팅, 범용 프로그래밍, 컴퓨터 과학 교육, 연구와 같은 다양한 문맥에 사용된다.

플랫폼은 래킷 언어의 구현체(복잡한 런타임 시스템, 다양한 라이브러리, JIT 컴파일러 등)를 제공하며 이 외에도 래킷 자체에서 작성되는 닥터래킷(DrRacket, 이전 이름: DrScheme)이라는 개발 환경도 함께 제공된다. IDE 및 이와 동반되는 프로그래밍 커리큘럼은 프로그램바이디자인(ProgramByDesign) 아웃리치 프로그램에 사용되는데, 이는 컴퓨팅과 프로그래밍을 필수적인 교양 교육 과정의 일부로 전환하려는 시도이다.
중심 언어는 확장 매크로 시스템으로 잘 알려져 있으며, 임베디드 및 도메인 특화 언어, 또 클래스나 모듈과 같은 언어 구성체, 각기 다른 시맨틱스를 갖춘 구별된 래킷 방언들의 제작을 가능케 한다.

플랫폼 배포의 경우 GNU 약소 일반 공중 사용 허가서(LGPL) 라이선스 하에서 자유-오픈 소스 소프트웨어로 배포된다. 공동체가 만든 확장 기능과 패키지들은 래킷의 중앙 패키지 카탈로그에 업로드된다.

코드 예제 
다음은 사소한 헬로 월드 프로그램이다:
#lang racket
"Hello, World!"
이 프로그램을 실행하면 다음과 같이 출력된다:

다음은 조금 덜 사소한 프로그램이다:

#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))))))
래킷 웹사이트에서 가져온 이 프로그램은 심도 8까지 네스트(nested)된 시에르핀스키 삼각형을 그린다.

#lang 디렉티브를 사용하여 각기 다른 래킷으로 소스 파일을 생성할 수 있다. 다음은 래킷의 정적 타이핑 변종인 Typed Racket에서의 팩토리얼 프로그램의 예시이다.
#lang typed/racket

(: fact (Integer -> Integer))
(define (fact n)
  (if (zero? n) 1 (* n (fact (- n 1)))))

각주

외부 링크 
 
 
 Package management system

함수형 프로그래밍 언어
객체 지향 프로그래밍 언어
교육용 프로그래밍 언어
크로스 플랫폼 자유 소프트웨어
LGPL 라이선스 소프트웨어
자유 컴파일러와 인터프리터