Ich habe eine Legierung Funktion in meinem Modell wie:Wie kann auf die Elemente in der Menge zugegriffen werden, die von einer Legierungsfunktion zurückgegeben werden?
fun whichFieldIs[p:Program, fId:FieldId, c:Class] : Field{
{f:Field | f in c.*(extend.(p.classDeclarations)).fields && f.id = fId}
}
Diese Funktion ist in meinem Modell arbeitet und eine Reihe von Elementen wie zurückgeben kann: return {Feld $ 0, Feld $ 1} obwohl die Funktion nicht "Feld setzen". Ich habe dies bereits durch das Legierungs-Evaluierungswerkzeug gesehen (erhältlich in alloy4.2.jar). Was ich versuche, das erste Element dieses Satzes in einem anderen Prädikat zu tun bekommt, zum Beispiel:
pred expVarTypeIsOfA[p:Program, exprName:FieldId, mClass:Class, a:ClassId]{
let field = whichFieldIs[p, exprName, mClass],
fieldType = field[0].type
{
...
}
}
Selbst wenn ich die Rückkehr der Funktion ändern „gesetzt Feld“, „der Fehler Dieser Ausdruck fehlgeschlagen typechecked "erscheint. Ich möchte nur das erste Element einer Menge erhalten, die von einer Funktion zurückgegeben wird, irgendeine Hilfe?