For faster navigation, this Iframe is preloading the Wikiwand page for Racket.

Racket

维基百科,自由的百科全书

Racket
Racket-logo.svg
Drracket.png
运行于Ubuntu的DrRacket
编程范型多范型: 函数式, 反射式, 元编程, 面向语言, 面向对象, 过程式, 模块化, 逻辑式
实现者PLT Inc.
发行时间1995年,​27年前​(1995
稳定版本
8.6[1]在维基数据编辑
( 2022年8月10日,51天前 )
类型系统动态类型, 强类型, 静态类型
系统平台x86, PowerPC, SPARC, MIPS, ARM
操作系统跨平台
许可证LGPL
文件扩展名.rkt, .rktl, .rktd, .scrbl, .plt, .ss, .scm
网站racket-lang.org
派生副语言
Typed Racket, Lazy Racket, Scribble, FrTime, more
启发语言
Scheme, Eiffel[2]
影响语言
Clojure[3]RustScheme[4]

Racket(原名 PLT Scheme[5][6])是个通用、多范型,属于Lisp家族的函数式程序设计语言,它的设计目之一是为了提供一种用于创造设计与实现其它编程语言的平台,Racket被用于脚本程序设计、通用程序设计、电脑科学教育和学术研究等不同领域。

Racket有一个实现平台,包含了执行环境、函数库、即时编译器(JIT compiler)等等,还有提供一个以Racket本身写成的开发环境 DrRacket[7] (原名 DrScheme)。

Racket平台的发行版本是免费且开放原始码的,以GNU宽通用公共许可证授权发行,所有由社群所编写的扩展和包都会被上传到 PLaneT(一个网页包发布系统)。

基于 Racket 实现的 Scribble 可以用来构建HTMLPDF(依赖 LaTeX),Racket 官方文档就是基于这个语言来编写的。

开发原则

Racket的开发基于以下原则:[8]

  • 编程语言的目的是表述和解决问题,这一过程通常在特定的情境中发生,该情境有一定的描述语言,因此Racket应该是能够创制新编程语言的编程语言;
  • 基于上述的表述问题的方式,问题系统可视为多语言的相互联系的组件的集合,Racket应当能够提供足够的保护机制,允许实现各种语言的完整特性;
  • 与问题解决相关的在语言之外的机制,如项目和资源的管理,也可被Racket转换为语言构造。

历史

开发

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 加入了教学用语言,例如 代数步进器[9]读取-求值-输出循环、constructor-based printer 和其他许多发明,推出了一套有应用价值的程序教学环境。

2001年,核心团队(Felleisen, Findler, Flatt, Krishnamurthi)也编纂和发行了他们的第一本教科书《How to Design Programs 1ed页面存档备份,存于互联网档案馆)》,融入了许多他们的教学理念。

代码示例

杨辉三角形(代码来自: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)

运行后显示

'((1) (1 1) (1 2 1) (1 3 3 1) (1 4 6 4 1))

绘制迭代8次的 谢尔宾斯基三角形 (代码来自:Racket 官网):

The result of this program, as shown in DrRacket
The result of this program, as shown in DrRacket
#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)))))

注释

  1. ^ Racket v8.6. 2022年8月11日 [2022年8月11日]. 
  2. ^ Strickland, T.S.; Fellesisen, Matthias. DLS 2010: Contracts for First-Class Classes (PDF). 2010 [2014-03-05]. (原始内容 (PDF)存档于2013-05-23). 
  3. ^ Bonnaire-Sergeant, Ambrose. A Practical Optional Type System for Clojure (学位论文). The University of Western Australia. 2012. 
  4. ^ Sperber, Michael; Dybvig, R. Kent; Flatt, Matthew; Van Straaten, Anton; et al. Revised6 Report on the Algorithmic Language Scheme (R6RS). Scheme Steering Committee. August 2007 [2011-09-13]. (原始内容存档于2013-06-25). 
  5. ^ PLT Scheme. [2014-03-05]. (原始内容存档于2014-03-05). 
  6. ^ What does "PLT" stand for?. [2014-03-05]. (原始内容存档于2014-08-21). 
  7. ^ DrRacket. [2014-03-05]. (原始内容存档于2014-03-05). 
  8. ^ Matthias Felleisen; et al. The Racket Manifesto. [March 25, 2015]. (原始内容存档于2015年4月2日). 
  9. ^ 存档副本 (PDF). [2014-03-12]. (原始内容存档 (PDF)于2013-04-30). 

外部链接

{{bottomLinkPreText}} {{bottomLinkText}}
Racket
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.