必威体育Betway必威体育官网
当前位置:首页 > IT技术

Racket编程指南——23 Racket和Scheme的方言

时间:2019-07-19 08:43:18来源:IT技术作者:seo实验室小编阅读:52次「手机版」
 

racket

23 racket和Scheme的方言

我们使用“Racket”来指Lisp语言的特定方言,以及以Lisp家族的Scheme分支为基础的方言。尽管Racket与Scheme相似,对模块的#lang前缀是Racket的一个特定功能,程序用#lang开始是不可能运行在其它Scheme实现中。同时,如不用#lang开始则大多数Racket工具默认模式不会工作

然而,“Racket”并不是由Racket工具支持的Lisp的唯一方言。相反,Racket工具的设计目的是支持多种Lisp语言,甚至是多种语言,这使得Racket工具套件可以为多个社区服务。Racket也给程序员和研究人员以开发和创建新语言所需的工具。

23.1 更多的Racket

23.2 标准

 23.2.1 R5RS

 23.2.2 R6RS

23.3 教学

23.1 更多的Racket

“Racket”和一个通常意义上的语言相比更多的是编程语言的概念。宏可以扩展一个基础语言(就像宏中所描述的那样),交互的解析器可以从头构建一个全新的语言(就像创造语言描述的那样)。

开始一个Racket模块的#lang行声明模块的基本语言。通过“Racket,”我们通常指#lang被基础语言racket或racket/base(其中racket是一个扩展)跟着。Racket分配提供了额外的语言,包括以下内容

  • typed/racket——像racket一样,但属于静态类型;参见(part ("(lib typed-racket/scribblings/ts-guide.scrbl)" "top"))。

  • lazy——像racket/base一样,但避免对表达式求值,直到它的值是必需的;参见惰性(Lazy)Racket文档。

  • frtime——以更激进的方式进行求值以支持活性程序;参见FrTime文档。

  • scribble/base——一种语言,它看起来与其说是Racket不如说更像Latex,用于书写文档;参见(part ("(lib scribblings/scribble/scribble.scrbl)" "top"))。

这些每一个语言都是通过用#lang之后的语言名称开始模块而被使用,例如,这个文件的源码用#langscribble/base开始。

此外,Racket用户可以定义自己的语言,像在创造语言里论述的。通常,一种语言的名称通过添加/lang/reader透过一个模块路径映射到它的实现;例如,语言名称scribble/base被扩展到scribble/base/lang/reader,这是实现表面语法分析器的模块。一些语言名称充当语言加载器;例如,#langplanetplanet-path通过PLaneT下载、安装和使用一个语言。

23.2 标准

Scheme的标准方言包括那些被r5rs和r6rs定义的。

23.2.1 R5RS

“r5rs”代表TheRevised5 Report on the Algorithmic Language Scheme,它目前是最广泛被实现的Scheme标准。

在默认模式的Racket工具不符合R5RS,主要因为Racket工具通常期待模块,同时R5RS并不定义一个模块系统。典型的单文件R5RS程序可以通过用#langr5rs对其进行前缀而转换为Racket程序,但其它的Scheme系统不识别#langr5rs。plt-r5rs可执行文件(见(part ("(lib r5rs/r5rs.scrbl)" "plt-r5rs")))更直接地符合r5rs标准。

除了模块系统,对R5RS和Racket的句法表和函数有所不同。当以#langracket进行前缀时,只有简单的R5RS成为Racket程序,并且当一个#lang行被删除时,相对较少的Racket程序成为R5RS程序。另外,当用Racket模块混合”R5RS模块”时,注意R5RS配对相当于Racket可变配对(就像用mcons构造一样)。

参见(part ("(lib r5rs/r5rs.scrbl)" "top"))以获取关于用Racket运行R5RS程序的更多信息

23.2.2 R6RS

“R6RS”代表TheRevised6 Report on the Algorithmic Language Scheme,它用一个模块系统扩展了r5rs,类似于Racket的模块系统。

当一个R6RS库或顶层程序用#!r6rs进行前缀(这是有效的R6RS语法),那它也可以用作一个Racket程序。这是因为在Racket中的#!被作为跟着一个空格的#lang简写对待,所以#!r6rs选择r6rs模块语言。但是注意,与R5RS相比, R6RS的句法表和函数与Racket不同,并且R6RS配对是可变配对。

参见(part ("(lib r6rs/scribblings/r6rs.scrbl)" "top"))以获得更多关于用Racket运行R6RS程序的信息。

23.3 教学

How to Design Programs教科书依赖于Racket的教学变体,从而为新程序员顺利地引入编程概念。请参见theHow to Design Programs语言 documentation。

How to Design Programs语言通常不使用带#lang前缀的方式,而是在DrRacket内通过从Choose Language...对话框选择语言来使用。

相关阅读

分享到:

栏目导航

推荐阅读

热门阅读