第一章 关于Icon
语言内置类型:
integer and real —— 整数和实数
null —— 空,未被初始化的变量都是这个值
string —— 字符串,任意长度
cset (character set) —— 字符集,字符串搜索函数使用字符集查找或者跳过的字符
procedure —— 过程,更像函数,是带返回值的
list —— 列表,列表可以像数组一样被索引。它们也可以用作堆栈和队列。所有列表都是动态分配的,并且可以增长到计算机内存所能容纳的任何长度
record —— 记录,每个记录类型都有固定数量的命名字段。它们在其他语言中像记录(或结构体)一样使用。所有记录都是动态分配的。
table —— 散列表,散列表将值与键关联起来。任何类型的值都可以用作键。任何类型的值都可以用作值。
set —— 集合,是任何类型的值的集合。不表示重复的值,因此无论将一个值插入到集合中多少次,它都只出现一次
co-expression —— 共同表达式,是程序中半独立于其他部分运行的部分。它可以用作生成器,在需要时从序列中每次生成一个值,也可以用作协例程,作为并发进程运行
file —— 文件
window —— 窗口,屏幕上用于交互图形的窗口
数据值具有数据类型。变量则不然。任何类型的值都可以赋给任何变量。当将不同类型的值放入相同的列表、表和集合中时,您会发现这是非常有用的。但是,您还会发现,您经常会犯为操作使用错误数据类型的错误。与许多其他语言不同,Icon编译器无法告诉您您犯了一个错误。相反,当您运行程序时,您将得到一个错误而终止。
Icon是一种表达式语言:几乎所有的可执行结构都是表达式,并且可以返回值。表达式级构造和语句级构造之间没有区别。可以在表达式中嵌套控制结构,这在大多数其他语言中是行不通的。你会发现这有时很方便。但是你应该小心;写高度复杂的表达式比读它们容易。
对于熟悉其他语言的程序员来说,Icon最困难的方面是它的目标导向计算,也就是说,它的回溯控制。大多数语言使用布尔数据类型来控制执行流。在大多数语言中,关系运算符产生布尔值,这些值由if和while来测试。Icon则完全不同,关系运算符不产生布尔值,而是产生成功或失败(也就是说,x := (3<2),想像其他程序语言一样获取布尔结果存变量里是行不通的,变量x还是null)。我们将在第三章花很多时间解释Icon是如何工作的。简单地说,在Icon表达式中,求值可以成功也可以失败。如果表达式成功,则生成一个值。如果失败,则控制返回到先前计算的表达式,以查看是否会生成另一个值。如果该表达式确实给出了另一个值,则控制再次启动,以查看后面的表达式现在是否可以成功。