跳转至

基本数据类型

引言

整型

  内建操作

浮点类型

  内建操作

字符串类型

  内建操作

布尔型

Built-ins

  Built-ins for float

  Built-ins for string

  Built-ins for int

引言

MirrorQL语言中的基本数据类型,包括整型、浮点型、布尔型以及字符串类型。

针对MirrorQL支持的数据类型,后续会扩展相关的内建函数--也即是系统已经帮用户写好的函数,用户可以直接拿过来使用。

整型

简单来说,整型变量用于保存整数,如306。例如:

let x: int = 306;
0
42
123
-2147483648

其中,整型使用int 关键字来标注。

内建操作

整型转字符串

let x :int;
x.itos()

浮点类型

简单来说,而浮点型变量则用于保存浮点数,也就是带小数位的数,如3.14。例如:

let x: float = 3.14;
0.5
2.0
123.456
-100.5

其中,浮点类型使用float关键字来标注。

内建操作

浮点转字符串

let x :float;
x.ftos()

字符串类型

  字符串类型的变量用来存放以双引号开头和结尾的字符序列,即字符串。例如:

let x:str = "hello world"
let y = "hello"
let z:str = "He said, \"Logic clearly dictates that the needs of the many...\""

其中,字符串类型使用str关键字来标注;

MirrorQL 实现中支持字符串中包含相关的转义字符;

常见的转义字符如下:

n  \" 表示字符"
n  \\ 表示字符\
n  \n 表示换行符
n  \r 表示回⻋符
n  \t 表示制表符

内建操作

正则匹配

基本类型str支持正则表达式匹配,对应str类型的成员谓词match

用法为:字符串.match(str类型的正则表达式)。示例:

"aaa".match("*") 成立
"aaa".match("bbb") 不成立。

欲匹配的正则表达式不一定是字面量,x=="bbb" and "aaa".match(x)也是合法的用法。

拼接

  • str类型可以直接使用+运算符进行拼接。示例:
"aaa" + "bbb" == "aaabbb"
  • str类型也可以通过方法cat来进行拼接。示例:
let x: str;
let y: str;
let z: str;
z == x.cat(y)

获取长度

str类型的成员谓词len用来获取字符串的长度。

用法为字符串.len(),返回一个int。示例:

"aaa".len()==3

字符串转整型

str类型的成员谓词toInt,将字符串转整型。示例:

    let s: str;
    s == "123890"
    and
    i == s.toInt()

字符串转浮点

str类型的成员谓词toFloat,将字符串转浮点。示例:

    let s: str;
    s == "12389.98"
    and
    i == s.toFloat()

获取子串

str类型的成员谓词substr(start, num),获取字串。其中start 表示字串的起始位置, num表示要获取的子串的个数。 示例:

    let s: str;
    s == "12389078qwert"
    i == s.substr(2,10)

子串截取规则

当给出的截取长度大于实际可以截取的长度时,只会截取实际能截取的长度。例如"abc".substr(1,100)=="bc"

当给出的起始下标越界时,substr会返回一个空串,并在运行时给出警告。

布尔型

布尔型变量用来存放布尔值,即no(假)或者 yes(真)。

为了便于读者理解,这里举例说明:

let x: yon = yes;

在上面的代码中,我们定义了一个布尔型变量x,并将其赋值为yes

其中,布尔类型使用yon关键字标注。

Built-ins

MQL包含许多内置谓词。本节定义了所有数据库都包含的许多内置谓词。每个数据库还包括许多本文档中未指定的其他非成员谓词。

本节给出了几个内置谓词表。对于每个谓词,该表给出了每个有谓词的谓词的结果类型以及参数类型的顺序。

每个表还指定了每个谓词的数据库内容中包含哪些有序元组。它通过一个对所包含的元组完全正确的描述来指定这一点。在每个描述中,如果谓词具有结果类型,则“result”是每个元组的最后一个元素。“receiver”是每个元组的第一个元素。“arguments”是每个元组中除结果和接收者之外的所有元素。

Built-ins for float

以下内置谓词是float类型的成员:

名称 返回类型 参数类型 描述 示例
fabs float 返回绝对值 fabs(-3.14) 结果为3.14, -3.14.fabs() 结果为3.14
pow float int 求幂 2.0.pow(3) 结果为8.0
ftos str 浮点转字符串 3.14.ftos() 结果为"3.14"
floor int 向下取整 3.14.floor() 结果为3
ceil int 向上取整 3.14.ceil() 结果为4
round int 四舍五入 3.14.round() 结果为3
next_up float 下一个数 3.14.next_up() 结果为3.1400000000000001
next_down float 上一个数 3.14.next_down() 结果为3.1399999999999999
ulp float 最小浮点精度 3.14.ulp() 结果为2.220446049250313e-16
### Built-ins for string

以下内置谓词是str类型的成员:

名称 返回类型 参数类型 描述 示例
len int 获取长度 "hello".len() 结果为5
match str 正则匹配 "hello".match("h.*") 结果为1
cat str str 拼接 "hello".cat("world") 结果为"helloworld"
substr str int 获取子串 "hello".substr(2,3) 结果为"llo"
toInt int 字符串转整型 "123".toInt() 结果为123
toFloat float 字符串转浮点 "123.45".toFloat() 结果为123.45
index_of int str 返回子串第一次出现的位置 "hello world".index_of("l") 结果为2

Built-ins for int

以下内置谓词是int类型的成员:

名称 返回类型 参数类型 描述 示例
abs int 返回绝对值 -3.abs() 结果为3
itos str 整型转字符串 123.itos() 结果为"123"
pow float int 求幂 2.pow(3) 结果为8.0
rand int int 随机数 rand()
rand_with_range int int , int 随机数范围 rand_with_range(1,10)