为什么Plus运算符不能处理Alloy中的整数?

时间:2014-05-18 06:56:55

标签: alloy

以下合金代码是针对8Queens问题的 我不知道为什么plus运算符和减号运算符不能正常工作
所以在执行后,同一对角线上有皇后 此外,当在2#
之间使用加号和减号运算符时,我面临这个错误 例如:
    #q1.row +#q2.col-#q1.col!=#q2.row

感谢您的回复 最好的问候


这是8Queens代码:

sig Queens{
row:Int,
col:Int
}
{row>=0 and row <#Queens and col>=0 and col<#Queens}

pred nothreat(q1,q2 : Queens) {
   q1.row != q2.row 
   and q1.col != q2.col 
   and q1.row+q2.col-q1.col != q2.row
   and q1.row-q2.col+q1.col != q2.row
}

pred valid { 
all q1,q2 : Queens |   q1 != q2 => nothreat[q1, q2]
 }
fact card {#Queens =8}
run valid for 8 Queens, 8 Int

1 个答案:

答案 0 :(得分:2)

改为使用plusminus函数(例如q1.row.plus[q2.col].minus[q1.col]),因为+始终被视为集合并且-作为集合差异