项式

Erlang中以下数据类型[1]被称为项式

  • 常量类型
    • 数值
      • 整数,用于存储自然数
      • 浮点数,用于存储实数
    • 原子式
    • Pid(进程标识符process identifier的缩写),用于存储进程标识
    • 引用,用于存储系统范围内唯一的引用
  • 复合数据类型
    • 元组,用于存储固定数目的多个项式
    • 列表,用于存储可变数目的多个项式

数值

以下实例都属于数值:

  1. 123 -34567 12.345 -27.45e-05

整数精度与实现相关,但任何Erlang系统都应保证至少24位的整数精度。

$<Char>标记表示字符Char对应的ASCII值,如$A表示整数65。

不以10为基数的整数可写作<Base>#<Value>,如16#ffff表示十进制整数65535。Base的取值范围为2 .. 16。

浮点数以传统方式书写。

原子式

原子式是有名称的常量。例如在某个用于日历计算的程序中可使用mondaytuesday等等表示一星期中的各天。原子式用于增强程序的可读性。

一些原子式实例:

  1. friday unquoted_atoms_cannot_contain_blanks
  2. 'A quoted atom which contains several blanks'
  3. 'hello \n my friend'

原子式以小写字母(a..z)开头,以非字母数字字符结尾——否则就必须用引号括起来。

通过将原子式以引号括起来,原子式中便可以出现任意字符。原子式总是以可被 Erlang 读取程序读入的格式输出。原子式引号内的字符遵循如下规范:

字符含义
\b退格符
\d删除符
\e转义符(ESC)
\f换页符
\n换行符
\r回车符
\t制表符
\v垂直制表符
\反斜线
\^A..\^Zcontrol A到control Z(即0 .. 26)
\'单引号
\"双引号
\OOO使用八进制格式OOO表示的字符

在引号括起来的原子式中如果包含字符序列\C,其中C的ASCII值小于32,则表示\C的这部分源码被忽略(这样我们在编程时就可以使用一个反斜线加换行符来将长原子式分隔为几行)。

元组

以花括号包围的一系列以逗号分隔的项式称为元组。元组用于存储固定数目个项式。它们与传统编程语言中的结构记录类似。

元组{E1,E2,…,En},其中n大于0,称为大小n的元组。元组中的单个项式称为元素

以下是一些元组实例:

  1. {a, 12, 'hello'}
  2. {1, 2, {3, 4}, {a, {b, c}}}
  3. {}

列表

以方括号包围的一系列以逗号分隔的项式成为列表。列表用于存储可变数目个项式。

对于列表[E1,E2,…En],其中n >= 0 ,称其长度为n

以下是一些元组实例:

  1. [1, abc, [12], 'foo bar']
  2. []
  3. [a,b,c]
  4. "abcd"

被我们称之为字符串的"…"标记,实际上是引号中各个字符组成的列表的ASCII简写形式。因此"abc"对应于[97,98,99]。在原子式中使用的转义规则在字符串中通用。

在对列表进行处理时,往往需要一种方便的手段来引用列表的第一个元素以及除掉第一个元素以外列表的剩余部分。方便起见,我们将列表的第一个元素称为头部,将剩余部分称为 尾部

我们使用[E1,E2,E3,…,En|Variable]来标记一个前n个元素分别为E1,E2,E3,…,En而剩余部分记为Variable的列表。

注意“|”之后的项式不一定要是列表,它可以是任意一个合法的Erlang项式。最后一个尾部为项式[]的列表称为列表或格式良好的列表——大多数(尽管不是全部)Erlang程序都是被编写来处理格式良好的列表的。