通过例子学TLA+(九)--元组和结构体

元组

元组和其他语言中的数组类似,用<<>>表示,不同之处在于TLA+中元组下标是从1开始。

x == <<4, 5, 6>>;
x[1] + x[2] + x[3] = 15;

DOMAIN 操作符可以作用于元组 例如

x == <<"hello", "world", "!">>
DOMAIN x = {1,2,3} \* DOMAIN x 等价于 1..Len(x)

跟元组有关的Module Sequences 已经在之前介绍过了。

元组集合

两个集合Set的笛卡尔积是元组集,例如

{"a","b"} \X {2,3} = {<<"a", 2>>, <<"a", 3>>, <<"b", 2>>, <<"b", 3>>}

结构体

结构体是有key和value组成,跟hash一样,表现形式上采用 |-> 符号或者 :来分隔key和value。当使用:来分隔时得到的是元素集合,例如:

\* 用|->表示
x == [a |-> 1, b |-> {2, 3}];
x.a = 1;
x["b"] = {2, 3};

\* 用:表示
y == [a : {1}, b : {2, 3}]; \* 注意与前面的x表示的意思不一样,上述x为结构体,这里的y是结构的集合
y = { [a |-> 1, b |-> 2], [a |-> 1, b |-> 3] }

\* 下面的表述会报错:
z == [a:1, b:{2,3}] \* 用:分隔,需要value为集合

可以使用DOMAIN来获取结构体的keys,返回结果是keys字符串的集合例如

x == [a |-> 1, b |-> {2, 3}];
DOMAIN x = {"a","b"} \* 注意x

成员访问

上面例子中有关于成员访问的格式,如

x == [a |-> 1, b |-> {2, 3}];
x.a = 1;
x["b"] = {2, 3};

\* 复杂结构的访问
x == [a |-> {<<>>, <<1, 2, 3>>, <<3, 2, 1>>}, b |-> <<[a |-> 0]>>];
x.b[1].a; \* 0
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值