在“需求工程”(2007)一文中,"问题框架中的需求进展",有一个关于交通灯问题的工作示例,我已将其转录到Alloy编辑器中。不幸的是,我在测试代码时遇到以下错误。
启动求解器...
发生了类型错误: 这必须是一个集合或关系。 相反,它有以下可能的类型: {PrimitiveBoolean}
错误由以下谓词触发:
pred LightUnitBreadcrumb [] {
all t: Time |
NGObserve [t] <=>
odd [NGPulse [t]] and
SGObserve [t] <=>
odd [SGPulse [t]] }
参考下面的NGPulse谓词:
sig NGP, SGP, NRP, SRP in Time {}
pred NGPulse [t: Time] {t in NGP}
pred SGPulse [t: Time] {t in SGP}
pred NRPulse [t: Time] {t in NRP}
pred SRPulse [t: Time] {t in SRP}
答案 0 :(得分:2)
我的猜测是,odd
的方括号之间需要设置值表达式,而不是对NGPulse
或SGPulse
谓词的调用。实际上,谓词是布尔值而不是设置/关系值表达式,因此是错误。
答案 1 :(得分:0)
完全。我在book的第137页上解释了为什么boolean不是Alloy中的类型。