[英]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.