跳转到内容

Sway 参考手册/组合基本类型

来自维基教科书,开放的书籍,为开放的世界

就像基本类型本身一样,基本类型的组合也是表达式。例如,假设你忘记了你的乘法表,不确定 8 乘以 7 是 54 还是 56。我们可以问 Sway,向解释器呈现表达式

   sway> 8 * 7;
   INTEGER: 56

和以前一样,分号表示表达式的结束。乘号 * 被称为运算符,因为它操作 8 和 7,产生一个等价的基本类型值。8 和 7 被称为操作数。似乎各种操作数的实际名称不再被教授了,所以为了怀旧,这里有它们。乘号左侧的操作数(在本例中为 8)被称为被乘数。右侧的操作数(在本例中为 7)被称为乘数。结果被称为

其他基本运算符的操作数也有特殊的名称。对于加法,左侧操作数被称为被加数,右侧操作数被称为加数。结果被称为。对于减法,左侧操作数是被减数,右侧是减数,结果是。最后,对于除法(我认为这仍然是教授的),左侧操作数是被除数,右侧操作数是除数,结果是

一般来说,运算符与其操作数之间用空格、制表符或换行符隔开,统称为空白[1]

输入表达式 8*7; 将是一个错误,因为乘法运算符没有必要的空白。

事实上,Sway 总是接收一个表达式,并显示一个等价的基本表达式(例如,整数或实数)。所有 Sway 运算符都是二元的,意味着它们恰好对两个操作数进行运算。我们首先看一下数值运算符。

数值运算符

[编辑 | 编辑源代码]

如果将两个事物加在一起有意义,你可能可以使用 + 运算符在 Sway 中执行此操作。例如

   sway> 2 + 3;
   INTEGER: 5
   
   sway> 1.9 + 3.1; 
   REAL: 5.00000000000
   
   sway> "hello" + "world"
   STRING: helloworld
   

可以看出,如果将两个整数加在一起,结果是一个整数。如果对两个实数做同样的事情,结果是一个实数。对字符串加字符串也是如此。当添加不同类型的对象时,事情变得更加有趣。将整数和实数(按任何顺序)加在一起,总是产生一个实数。

   sway> 2 + 3.3;
   REAL: 5.30000000000
   
   sway> 3.3 + 2;
   REAL: 5.30000000000
   

将整数和字符串(被加数为整数)加在一起,产生一个整数。加数字符串,如果可能的话,被解释为整数

   sway> 2 + "3";
   INTEGER: 5
   
   sway> 2 + "3.3";
   INTEGER: 5
   
   sway> 2 + "hello";
   INTEGER: 2

将整数和字符串(被加数为字符串)加在一起,产生一个整数。加数整数被解释为字符串

   sway> "hello" + 2;
   INTEGER: "hello2"
   
   sway> "3" + 2;
   STRING: "32"
   

数字的减法、乘法和除法遵循与加法相同的规则。但是,这些运算符,按照定义,不适用于字符串[2]

特别要注意的是,除法运算符对于整数操作数而言。考虑计算以下表达式

   14 / 2

如果要求 Sway 解释器执行此任务,结果将如预期的那样为 7。但是,如果要求解释器计算表达式...

   14 / 5

结果将是 2,而不是 2.8。根据上面的规则,整数除法总是返回一个整数,如果有小数部分,则会丢弃。请注意,以下所有六个表达式都计算为 2.8

   14 / 5.0
   14.0 / 5
   14.0 / 5.0
   14 / real(5)
   real(14) / 5
   real(14) / real(5)

最后三个说明了转换函数的使用。在上面的情况下,整数在除法发生之前被转换为实数。

整数除法的补充是模运算符 %。虽然整数除法的结果是商,但模运算符的结果是余数。因此

   14 % 5

计算结果为 4,因为 5 除以 14 剩下 4。为了检查这是否属实,可以要求解释器计算

   14 / 5 * 5 + (14 % 5) == 14

这个复杂的表达式提出了问题“商乘以除数加上余数是否等于原始被除数?”。Sway 解释器将回答,确实如此。使用圆括号的原因是 Sway 算术运算符之间缺乏优先级,将在下一章中详细解释。

关于空白

[编辑 | 编辑源代码]

计算机程序中的空白(制表符、换行符和空格)有两个目的。首先是使语言中的表达式赏心悦目。第二,空白通常表示一个基本类型的结束。与许多编程语言不同,Sway 使用空白来表示运算符的结束。因此,8 * 7 被解释为由 * 运算符隔开的两个数字,而 8*7(没有空格)将被认为是“错误的数字”。我们将在稍后了解变量。

比较事物

[编辑 | 编辑源代码]

还记得布尔基本类型 :true 和 :false 吗?我们可以使用布尔比较运算符生成这样的值。例如,我们可以询问 3 是否小于 4

   sway> 3 < 4;
   SYMBOL: :true

解释器的响应表明,确实,3 小于 4。如果不是,解释器将响应 :false。除了 <(小于)之外,还有其他布尔比较运算符:<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)和 !=(不等于)。

除了整数之外,我们还可以使用小于或大于之类的运算符比较实数与实数,比较字符串与字符串。一般来说,比较整数或实数与字符串是非法的。

任何 Sway 类型都可以使用 == 和 != 比较运算符与任何其他类型进行比较。如果使用这些运算符比较整数与实数,则在进行比较之前,整数将被转换为实数。在其他情况下,使用 == 比较不同类型将产生 :false 值。相反,使用 != 比较不同类型将产生 :true(上述例外是整数与实数的比较)。如果类型匹配,则 == 仅当值也匹配时才产生 true。运算符 != 也会相应地执行。

组合比较

[编辑 | 编辑源代码]

我们可以使用布尔逻辑连接词 &&(和)和 ||(或)组合比较。

   sway> 3 < 4 && 4 < 5;
   SYMBOL: :true
   
   sway> 3 < 4 || 4 < 5;
   SYMBOL: :true
   
   sway> 3 < 4 && 5 < 4;
   SYMBOL: :false
   
   sway> 3 < 4 || 5 < 4;
   SYMBOL: :true

第一个交互询问表达式3 < 4和表达式4 < 5是否都为真。由于两者都为真,解释器响应 :true。第二个交互询问至少一个表达式是否为真。同样,解释器响应 :true。&& 和 || 之间的区别在最后两个交互中得到说明。由于只有一个表达式为真(后一个表达式为假),因此只有 || 运算符产生真值。

还有一个布尔逻辑运算,称为。它只是反转附加到它的表达式的值。非运算符只能作为函数调用(因为它不是二元运算符)。由于你还不了解函数,我会向你展示它的外观,但不会解释它的操作。

   sway> not(3 < 4 && 4 < 5);
   SYMBOL: :false
   
   sway> not(3 < 4 || 4 < 5);
   SYMBOL: :false
   
   sway> not(3 < 4 && 5 < 4);
   SYMBOL: :true
   
   sway> not(3 < 4 || 5 < 4);
   SYMBOL: :false

请注意,我们已经将附加到之前涉及逻辑连接词的每个表达式。另请注意,解释器的响应在每种情况下都与之前相反。

  1. 计算机科学家在写年度报告时,经常将他们所做和正在报告的事物称为暗空间。拥有大量的暗空间总是好的!
  2. 这并不意味着你永远不能减去字符串。稍后你将学习如何覆盖 Sway 的减号运算符,这样你就可以随心所欲地减去奇怪的东西。


基本类型 · 优先级和结合性

华夏公益教科书