在模块化项目中使用add函数

时间:2014-01-08 10:02:51

标签: module alloy

我已用合金建模我的项目,我想将运行部分与项目的建模部分分开。 在某些事实和谓词中,我在基数比较中使用了add函数。 这是一个例子:

#relation1 = add[ #(relation2), 1]

当运行部件和模型部件在同一个文件中时,所有工作都成功。

但是当我将它们分成2个文件时,我有以下语法错误:

The name "add" cannot be found.

我认为需要打开整数模块,其中有一个add函数,所以我把它打开了模型部分的标题。 但是后来运行时要求我指定这个/ Univ。

的范围
You must specify a scope for sig "this/Univ"

这是一个例子: 首先是一个模块中的模型

module solo

open util/ordering [A] as chain
//open util/integer

sig A{ b : set B}

fact {  all a : A - chain/last | #(a.next.b) = add[ #(a.b), 2]}

sig B{}

然后在另一个模块中运行部分:

module due

open solo

run {#(solo/chain/first.b) = 2 }for 10 B, 5 A

当我这样称呼它时,我有“无法找到名称添加”错误。 当我取消注释整数模块开放时,我有“你必须为sig指定一个范围”这个/ Univ“”错误。

我该怎么做才能使它有效?

1 个答案:

答案 0 :(得分:3)

如果我没弄错,+是联合运算符,因此无法用于执行添加。

您使用的是哪种合金?

我认为add [Int,Int]函数最近被添加,之前它是加号[int,int]。

您可能想尝试加上[Int,Int]并查看它是否解决了您的问题。 否则,访问您的模型会很高兴。也许错误来自其他地方。