CPN ML 中的递归、列表与模式匹配
1. 递归与列表在 CPN 模型中的应用
在创建复杂的 CPN 模型时,常常需要对结构化的值进行搜索。例如,遍历一个列表以检查某个元素是否存在于该列表中。在命令式编程语言中,迭代通常使用 while 循环、 for 循环或 repeat-until 循环来实现。而在函数式编程语言中,递归函数则用于表达迭代。
为了说明递归在 CPN ML 中的使用,我们开发了一个协议的变体,其中发送方可以发送任何尚未收到确认的数据分组。以下是相关的模型及函数实现:
- CPN 模型修改 :将 NextSend 位置替换为新的 Acked 位置,其颜色集为 ACKS 。该位置将包含一个列表令牌,其中包含已收到确认的数据分组的序列号。初始时, Acked 位置包含一个空列表。
colset ACKS = list NO;
var acks : ACKS;
-
member函数 :用于SendPacket转换的防护条件,检查要发送的数据分组的序列号(绑定到n)是否在已收到确认的列表(绑定到acks)中。
超级会员免费看
订阅专栏 解锁全文
17

被折叠的 条评论
为什么被折叠?



