首先,使用正確的術語,當謂詞爲真時不會發生任何事情;它更像另一種方式,一個實例(一組原子分配)滿足(或不)某種條件,使得謂詞爲真(或錯誤)。
此外,您的型號不完整,因爲Color
(其中應該包含名爲Red
的屬性)的sig
聲明沒有。
我假設你想用含紅綠燈十字路口世界建模,如果是的話,我會用以下模型:
abstract sig Color {}
one sig Red,Yellow,Green extends Color {}
sig Light {
color: Color
}
sig Junction {
lights : set Light
}
// This is just for realism, make sure each light belongs to exactly one junction
fact {
Light = Junction.lights
no x,y:Junction | x!=y and some x.lights & y.lights
}
fun count[j:Junction, c:Color] : Int {
#{x:Light | x in j.lights and x.color=c}
}
pred mostly[j:Junction, c:Color] {
no cc:Color | cc!=c and count[j,cc]>=count[j,c]
}
run{
some j:Junction | mostly[j,Red]
} for 10 Light, 2 Junction, 10 int
綜觀上述,我使用的是#操作數數在一個集合中的原子,我指定一個10位整數的位寬,這樣我就不會在大集合中使用#運算符時發生溢出。
當您執行此操作時,您將得到一個實例,其中至少有一個結點大部分爲紅燈,它將在可視化工具中標記爲$j
。
希望這會有所幫助。
這功課嗎?不會以任何方式隱瞞信息,只是有興趣知道:) –
不,我想在短時間內拿起合金。因此,認爲使用堆棧溢出是一個好主意,因爲他們的網站說,SO是最好的地方問合金相關信息 – Programmer
被老闆叫到,抱歉的延遲,我有一個答案在做:)但它會採取而。 –