Fuxi中赋值与约束是两个重要的概念。
赋值(Assignment)是将某一特定的数值存放到变量所代表的一个特定的存储位置的过程。和C++、JAVA等语言不同的是,Fuxi的赋值是一个bool型函数,如果赋值成功,返回true,否则返回false。程序对变量进行赋值时,首先要检查该变量能否被赋值。一个变量能够被赋值的条件是:变量是自由变量或引用变量,同时待赋的值与变量有相同或兼容的类型。我们不能对约束变量赋值。
对变量的赋值,采用赋值符号(:=)。例如,
x := 100
除了‘:=’给变量赋值外,Fuxi语言还提供以下的自运算赋值形式:
赋值
实 例
等价形式
+=
x += 10
x := x + 10
-=
x -= 10
x := x - 10
*=
x *= 10
x := x * 10
/=
x /= 10
x := x / 10
%=
x %= 10
x := x % 10
&=
x &= 10
x := x & 10
|=
x |= 10
x := x | 10
^=
x ^= 10
x := x ^ 10
&&=
x &&= y
x := x && y
||=
x ||= y
x := x || y
++
x++
x := x + 1
–
x–
x := x - 1
约束(Binding)是将一个变量同一个表达式关联起来,在程序的其它地方对该变量的引用也就等同于对与其关联的表达式的引用。一个约束变量在其被释放(unbind)之前,其值是固定的,也就是它所代表的表达式的值。我们不能对一个约束变量赋值,也不能再把一个约束变量约束成另一表达式。
我们可以在变量的声明中,通过等号(=)将其约束为一个表达式,例如:
int x = Console.Readln().ToInteger()
另外,程序中在调用对象的方法时,通过模式的匹配和合一,将模式中的形式参数约束成实际的参数表达式。关于模式的匹配与合一,我们将在以后的章节中讨论。
值得注意的是,赋值是把一个值赋给变量,赋的是“值”,因此赋值前需要先对表达式进行计算,把计算的结果赋给变量。而约束是把同某一表达式的等价关系赋给变量,赋的是“约束关系”。在这种意义上,我们也可以把约束理解成一种“关系”赋值。