跳转到正文

Racket ​

Racket 把语言本身当作可组合的库。文件首行 #lang 选择 Reader、宏、绑定与工具链,模块可以定义新的 #lang。这使它特别适合教学语言、DSL、静态检查和语言导向编程。

独特能力 ​

  • #lang 决定整个模块的语言,而不仅是导入一组函数。
  • Contract 在模块边界检查值与行为,并把错误责任定位到提供方或调用方。
  • 透明 Struct 提供可模式匹配、可打印的结构化数据。
  • Syntax Object 同时携带代码、词法上下文和源位置信息,是可靠宏扩展的基础。
rkt
#lang racket

(require racket/contract)

(struct point (x y) #:transparent)

(define/contract (distance-squared value)
  (-> point? exact-integer?)
  (+ (sqr (point-x value)) (sqr (point-y value))))

(define-syntax-rule (report label value)
  (printf "~a=~a\n" label value))

(report "lang" "racket")
(report "struct" (point 3 4))
(report "contract" (distance-squared (point 3 4)))
(report "syntax-object" (syntax? #'(+ 1 2)))
📸 Unverified Snapshot📋hello-lang-racket:9.3
Not verified
lang=racket
struct=#(struct:point 3 4)
contract=25
syntax-object=#t

Released under the MIT License.