Racket 教程大纲
语言优势概览
- Racket 的官网是 https://racket-lang.org
- Racket 有广泛和良好的文档
- Racket 是一门面向语言编程的语言,多个语言的集合
- Racket 是一个支持多范式的语言,命令式、面向对象、函数式和逻辑编程
开发环境安装
- IDE 支持跨平台
- 定义窗口和交互窗口
- 多种语言选择:图形选择或代码指定
- 帮助文档
语法:符号表达式
- 人类对世界的终极问题:世界上最基本的,不可再分的物质单位是什么?Racket 认为以下两种东西是原子性的:数和符号。
- 符号表达式的定义分为两种:
- 符号表达式是一个原子。
- 符号表达式 (x . y),其中 x 和 y 是其他的符号表达式。
- 原子通过组合形成各种复合的数据结构:即 pair,如 (a . b),用以聚合两个对象 a 和 b 组成的对。这种记法叫点对表示法,我们通常用点对表示法来表示符号表达式。
- 符号表达式的化简规则:
- 二叉树的右支总是比左支发达,因此,我们约定在点对表示法中,如果一个圆点的右边紧接着一个左括号,那么可以把这个圆点,左括号以及它匹配的右括号一同去掉,换成一个空格。比如 (b . (c . d)) 简写为 (b c . d)。
- 此外还有一个简写的规定:如果一个圆点的右边紧邻着原子 null,那么就可以把这个圆点连同 null 一同去掉,例如 (a . null) 简写为 (a),((a . null) . a) 简写为 ((a) . a)。
- 表是最常用的一种特殊类型的符号表达式,实际上 Lisp 的名称就是从“表处理”(LISt Processing)缩写而成的。一个非原子的符号表达式经过适当简写以后可以把全部圆点都略去,就说这个符号表达式是表。从表的定义可以看出,表的每一项如果不是原子则一定也是表。
数据:原子、列表和 ...
在介绍数据之前,我们先了解一个基本概念——命名。它是程序设计语言中必不可少的方面,就是它需要提供一种通过名字去使用计算对象的方式。我们将名字标识符成为变量,它的值也就是它所对应的那个对象。在 Racket 中给事物命名通过 define 的方式完成,例如:(define size 2)
- 原子数据:数字、布尔值、空值、字符、字符串、标识符等
- 列表:列表是主要的非原子结构(也就说,不是数字、字符串等)
只用原子和列表在理论上虽已完备,但是为了更高效的编程,Racket 提供了更多数据:
- 向量:向量表面上与列表相似但它们有很大的不同。与列表的内部树结构不同,向量是单元格的有序数组(很像命令式语言中的数组),它直接包含值
- 结构体:结构体可以让我们像 C 语言中那样构建自己的数据类型
- 哈希表
- 集合
过程:lambda 表达式
匿名函数:
(lambda (<formal parameters>) <body>)
有名函数:
(define <name> (lambda (<formal parameters>) <body>))
有名语法糖:
(define (<name> <formal parameters>) <body>)