繁体   English   中英

合金阵列模型

[英]Alloy Array Model

我刚开始学习Alloy模型语言,并试图用Alloy编写自己的数组模型。 但是,我无法从关系中提取索引。 这是我的信号和事实:

sig Element {}

one sig Array {
  // Map index to element
  IdxEle: Int -> Element,
  // Length of the array.
  length: Int
}

fact Index {
    all r : IdxEle | r.Int >= 0 and r.Int < length
}

我得到的错误是

This must be an integer expression.
Instead, it has the following possible type(s):
{none->none}

我查看了参考指南,但是找不到提取关系的idx字段的方法。 有人可以帮我吗? 谢谢

首先,模型中的r的类型为Array->Int->Element ,因此(Array->Int->Element).Int无法计算,因为元组中的最后一列的类型为Element,而不是Int期望。 (当您加入Alloy时,左侧的最后一列必须与右侧的第一列相同。)

其次,有更简单,更灵活和更具可读性的方式来表达您想要的内容:

sig Element {}

let range[start,end] = {  i : Int | i >= start and i < end }

one sig Array { index : Int -> Element } {
    index.Element = range[ 0, len[this] ]
}

fun len[ array : Array ] : Int { # array.index }

第三...为您提供了一个内置类型seq 它拥有您想要的一切,还有更多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM