我已用合金建模我的项目,我想将运行部分与项目的建模部分分开。 在某些事实和谓词中,我在基数比较中使用了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“”错误。
我该怎么做才能使它有效?
答案 0 :(得分:3)
如果我没弄错,+是联合运算符,因此无法用于执行添加。
您使用的是哪种合金?
我认为add [Int,Int]函数最近被添加,之前它是加号[int,int]。
您可能想尝试加上[Int,Int]并查看它是否解决了您的问题。 否则,访问您的模型会很高兴。也许错误来自其他地方。