热门问题
时间线
聊天
视角

Racket

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

Racket
Remove ads

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

事实速览 编程范型, 语言家族 ...
Remove ads

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

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

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

Remove ads

开发原则

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

  • 编程语言的目的是表述和解决问题,这一过程通常在特定的情境中发生,该情境有一定的描述语言,因此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 加入了教学用语言,例如 代数步进器[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)

运行后显示

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

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

Thumb
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)))))
Remove ads

注释

Loading content...

外部链接

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads