Loading AI tools
来自维基百科,自由的百科全书
Racket(原名 PLT Scheme[10][11])是个通用、多范型,属于Lisp家族的函数式程序设计语言,它的设计目之一是为了提供一种用于创造设计与实作其它编程语言的平台,Racket被用于脚本程式设计、通用程式设计、电脑科学教育和学术研究等不同领域。
编程范型 | 多范型: 函数式, 反射式, 元编程, 面向语言, 面向对象, 过程式, 模块化, 逻辑式 |
---|---|
语言家族 | Lisp/Scheme |
实作者 | PLT Inc. |
发行时间 | 1995年 |
当前版本 |
|
型态系统 | 动态类型, 强类型, 静态类型 |
系统平台 | x86, PowerPC, SPARC, MIPS, ARM |
操作系统 | 跨平台 |
许可证 | LGPL |
文件扩展名 | .rkt , .rktl , .rktd , .scrbl , .plt , .ss , .scm |
网站 | racket-lang |
衍生副语言 | |
Typed Racket[2], Lazy Racket[3], Scribble[4], FrTime[5] | |
启发语言 | |
Scheme, Eiffel[6] | |
影响语言 | |
Clojure[7]、Rust、Scheme[8] |
Racket有一个实作平台,包含了执行环境、函数库、即时编译器(JIT compiler)等等,还有提供一个以Racket本身写成的开发环境 DrRacket[12] (原名 DrScheme)。
Racket平台的发行版本是免费且开放原始码的,以GNU宽通用公共许可证授权发行,所有由社群所编写的扩充功能和套件都会被上传到 PLaneT(一个网页套件发布系统)。
基于 Racket 实现的 Scribble 可以用来构建HTML或PDF(依赖 LaTeX),Racket 官方文档就是基于这个语言来编写的。
Racket的开发基于以下原则:[13]
Matthias Felleisen在1990年代中期建立了PLT,一开始为一个研究团队,不久后逐渐投入程式设计师入门教材的专案开发。
在1995年1月,这个团队决定开发一个建立在 Scheme函数式程式语言上的教学用程式语言环境,Mattew Flatt 简单的从 libscheme 中将 MrEd (Racket 的原始虚拟机器)、wxWidgets 与一些其他的免费系统结合,接下来的几年内,由 Flatt、Robby Findler、Shriram Krishnamurthi、Cormac Flanagan 和其他许多人组成的团队推出了 DrScheme,一个给 Scheme 程式设计新手的程式设计环境,也作为弱型别程式语言的研究环境,当时 DrScheme 主要支援的程式语言叫做 PLT Scheme。
在此同时,该团队也开始为中学教师开设研习课程,教授他们学习程式设计与函数式程式设计,这些老师和他们的学生所做的现场测试提供了团对专案开发方向重要的依据,在接下来的几年中,PLT 团队为 DrScheme 加入了教学用语言,例如 代数步进器[14]、读取-求值-输出循环、constructor-based printer 和其他许多发明,推出了一套有应用价值的程式教学环境。
2001年,核心团队(Felleisen, Findler, Flatt, Krishnamurthi)也编纂和发行了他们的第一本教科书《程序设计方法》,融入了许多他们的教学理念。
在2010年6月7日, PLT Scheme被重命名为Racket[15]。
杨辉三角形(代码来自:rosettacode):
#lang racket
(define (next-row row)
(map + (cons 0 row) (append row '(0))))
(define (triangle row rows)
(if (= rows 0)
'()
(cons row (triangle (next-row row) (- rows 1)))))
(triangle (list 1) 5)
运行后显示
绘制迭代8次的 谢尔宾斯基三角形 (代码来自:Racket 官网):
#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))))))
在代码的第一行使用 #lang
来使用不同的方言. 下面的范例使用 Racket 的一种静态类型的方言 Typed Racket 计算阶层。
#lang typed/racket
(: fact (Integer -> Integer))
(define (fact n)
(if (zero? n) 1 (* n (fact (- n 1)))))
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.