在 TLA+ PLusCal 中定义运算符不起作用

Defining an operator in TLA+ PLusCal does not work

我在PlusCal中的基本代码如下。

---- MODULE flags ----
EXTENDS TLC, Integers
(* --algorithm flags
define
    IsFive(z) == z = 5
end define
begin
IsFive(5)
end algorithm; *)

====

IsFive(5) 在工具箱中突出显示,当我尝试 运行 模型时,我收到一个错误,指出宏 IsFive 未定义。

类似地,https://learntla.com/tla/operators/ 说运算符是函数,然后在下一章继续定义函数。

假设我需要检查验证参数是否为 5 的功能。我应该使用什么,运算符还是函数?

PlusCal 翻译器期望 beginend algorithm 之间的文本包含对变量的赋值(例如,x := 3),或对 PlusCal 宏的调用(分配给变量),使用 macro 键盘定义。

在您的示例代码中,PlusCal 转换器没有看到赋值语句,因此它假设 IsFive 是一个宏,然后报错。

如果您定义一个变量并使用您的运算符在您的算法中计算该变量的值,那么工具箱将能够解析您的代码。

---- MODULE flags ----
EXTENDS TLC, Integers
(* --algorithm flags
variable x;
define
    IsFive(z) == z = 5
end define
begin
x := IsFive(5)
end algorithm; *)
====