1 欢迎来到 Racket

1 Welcome to Racket

取决于您的看法,Racket是:

  • 一种编程语言–一种Lisp的方言,是Scheme的衍生物
  • 一族编程语言–各种Racket的变体,以及
  • 一个工具集– 用于一族编程语.

Racket中主要的工具如下:

  • racket, 编译器,解释器及运行时系统核心;
  • DrRacket,编程环境,IDE;
  • raco,命令行工具,用来执行Racket命令如 安装包,构建库等等.

多数情况下,使用DrRacket浏览Racket语言,特别是在初期,如果你喜欢,也可以使用命令行工具racket作为解释器,并使用你喜欢的文本编辑器;见这里写链接内容.余下向导部分,大多数情况下,独立于你所选择的编辑器.

如果使用DrRacket,需要首先选择合适的语言, 因为DrRacket适合多种Racket语言的变体,及多种其它语言.假设你之前没用过DrRacket,启动它,并在第一行输入

#lang racket

输入之后,点击上方的 运行 按钮, DrRacket就会清楚:你想使用普通的Racket变体进行工作( as opposed to the smaller racket/base 或 其它的可能)

如果你之前使用过DrRacket(使用其它方式,而不是#lang的方式)它将会记住你最后使用的语言.如果这样的话,使用 Language|Choose Language… 菜单,之后会弹出一个对话框,选择第一项,这会告诉DrRacket,使用在源码中声明的#lang指定的语言.之后,再把 #lang放在文字编辑区的第一行.

1.1 Interacting with Racket

DrRacket下面的文字区域和 racket命令行程序都是某种类型的计算器. 输入Racket表达式,按下回车键,之后答案就会打印出来.在Racket中,这个计算器叫作: 读取-计算-输出 循环 或 REPL.

> 5
5 

一个数字本身就是一个表达式,计算结果就是数字本身

> "Hello, world!"
"Hello, world!"

字符串也是一个表达式,结果是它自己. 字符串使用双引号包围.

> (substring "the boy out of the country" 4 7)
"boy"

Racket使用圆括号包围大型的表达式–几乎任何类型的表达式,除了简单类型.例如,函数调用的写法: (函数名 参数表达式).下面的表达式,调用了内建函数 substring,并传入参数 “the boy out of the country”, 4, 和 7:

1.2 Definitions and Interactions

(define (extract str) 
(substring str 4 7))

> (extract "the boy out of the country")
"boy"

> (extract "the country out of the boy")
"cou"

你可以使用 define 定义自己的函数,使其像 substring一样工作.

>#lang racket
>(define (extract str)
> (substring  str 4 7))

虽然你可以计算 define在REPL中,但是定义通常你想保存并稍后使用的剖分.所以在DrRacket中,通常把定义放在上面的文本区域–这里称为 定义区域–在 #lang 语言一行的下面.

如果调用 (extract “the boy”),是程序功能的一部分, 也可以写在定义区. 如果只是展示使用extract的作为例子, 通常:点击运行按钮, 然后 在REPL中输入 (extract “the boy”).

> (enter! "extract.rkt")
> (extract "the gal out of the city")
"gal"

当使用命令行racket时,你可以保存以上文字到一个文件,如”extract.rkt”,然后,启动racket在同一个目录下,并输入以下文字:

enter! 载入代码,并切换到解释环境,替代module,就像按下了 DrRacket中的运行按钮.

1.3 Creating Executables 创建可执行文件

如果文件(或定义在 DrRacket定义域)包含:

>#lang racket
>(define (extract str)
>(substring str 4 7))
>(extract "the cat out of the bag")

则它在运行时,编译成一个程序”cat”,你可以使用DrRacket或racket(enter!)运行它.如果保存到文件,也可以 从命令行运行:

> racket ‹src-filename›

打包程序,有一些选项:

  • DrRacket: Racket|Create Executable…
  • 从命令行, 执行 raco exe <src-filename>, 可以查看链接 raco exe 生成单独可以执行程序
  • 脚本执行时,搜索用户的可执行文件路径,也可以,使用全路径,此时就不用在意用户的执行文件路径了.

1.4 A Note to Readers with Lisp/Scheme Experience

如果了解一些Schem或Lisp,你可能会尝试这样写:

> (load "extract.rktl")
> (extract "the dog out")
"dog"

这样也可以工作,因为 Racket 乐意效访传统的 lisp 环境, 但是我们强列建议 反对使用 load或在module外写程序.

在module外面写,导至坏的错误信息, 不好的性能, 和使用人尴尬的 期待(组合及运行程序).问题不只是racket, ….

你可能感兴趣的:(Racket)