[英]Type Error in Alloy using Double In Statement
我正在嘗試編寫一個使所有香蕉和新鮮蘋果變得昂貴的謂詞。 我能夠達到其中一個條件,但不能同時達到。 我對使用 Alloy 很陌生,任何幫助將不勝感激。
下面是我的代碼,發生錯誤是因為我使用了雙 In 語句,但我不確定如何在不必使用兩個 in 語句的情況下編寫它。 我收到的錯誤是“類型錯誤,這必須是一個集合或關系”
sig Fruit{}
sig Banana, Apple, Pear extends Fruit {}
sig Fresh, Expensive in Fruit{}
pred BananasAndFreshApplesAreExpensive {
Apple in (Expensive & Fresh) + Banana in Expensive
}
run BananasAndFreshApplesAreExpensive
其它的辦法:
所有香蕉由集合Banana
所有新鮮蘋果由集合Fresh & Apple
表示 x 是昂貴的由x in Expensive
所以
Banana in Expensive
(Fresh & Apple) in Expensive
要不就
Banana + (Fresh & Apple) in Expensive
如果我正確理解您要執行的操作,則代碼不會失敗,因為您有 2 個“in”語句,這是因為您使用的是聯合運算符(“+”)而不是邏輯 AND(“and”或“&&”)。
謂詞的返回必須評估為 TRUE 或 FALSE。
如果你想說以下幾點:
...下面的代碼將做到這一點:
sig Fruit{}
sig Banana, Apple, Pear extends Fruit {}
sig Fresh, Expensive in Fruit{}
pred BananasAndFreshApplesAreExpensive {
Apple in (Expensive & Fresh) and Banana in Expensive
}
run BananasAndFreshApplesAreExpensive
但是,如果您想說:
...以下代碼是一種方法:
sig Fruit{}
sig Banana, Apple, Pear extends Fruit {}
sig Fresh, Expensive in Fruit{}
pred BananasAndFreshApplesAreExpensive {
(all a: Apple | a in Fresh => a in Expensive) and
Banana in Expensive
}
run BananasAndFreshApplesAreExpensive
但是請記住,這並不能說明 Apple 實例不新鮮。 換句話說,它將允許不新鮮的 Apple 實例變得昂貴。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.