0

在我的彩色 Petri 网模型中,我想以一种地方可以接收两种不同类型的“请求”的方式使用联合。

我有以下声明:

colset AUTHENTICATION = product INT * STRING;
colset REQUEST_PUB = product AUTHENTICATION * STRING * REAL;
colset REQUEST_SUB = product AUTHENTICATION * STRING * INT;
colset REQUEST_PUBSUB = union REQUEST_PUB + REQUEST_SUB;

我有以下配置:

过渡 ------> 地点 (REQUEST_PUBSUB) <----- 过渡

右转换正在发送((int, string), string, real),左转换正在发送((int, string), string, int)。由于 place 是类型REQUEST_PUBSUB,它是 and 的联合REQUEST_PUBREQUEST_SUB理论上这应该有效, once((int, string), string, real)显然是有效的REQUEST_PUB并且((int, string), string, int)显然是有效的REQUEST_SUB

但这不起作用,我收到以下错误:

错误:表达式不匹配约束 [tycon mismatch]
表达式:(INT * STRING) * STRING * REAL
约束:REQUEST_PUBSUB ms
表达式 ((int, string), string, real): REQUEST_PUBSUB ms
详细失败

错误:表达式不匹配约束 [tycon mismatch]
表达式:(INT * STRING) * STRING * INT
约束:REQUEST_PUBSUB ms
表达式 ((int, string), string, int): REQUEST_PUBSUB ms
详细失败

谁能帮我这个?我认为描述很清楚,但如有必要,我可以补充更多信息。

4

1 回答 1

0

我解决了它指定联合类型的标识符:

colset REQUEST_PUBSUB = union pub_req:REQUEST_PUB + sub_req:REQUEST_SUB;

然后,对于我使用的右过渡弧和我使用pub_req((int, string), string, real)的左过渡弧sub_req((int, string), string, int)

于 2019-07-22T20:18:06.250 回答