Извлечь все элементы набора, которые имеют определенный атрибут (связаны с определенным значением) - PullRequest
1 голос
/ 03 ноября 2019

Я пытаюсь написать функцию Alloy для извлечения всех элементов определенного типа, которые связаны с параметром функции (позвольте мне сказать, которые имеют это значение для одного из своих «полей / атрибутов»). Я пробовал разными способами, ни один из них не работал.

Это что-то вроде

fun get[a:A] : set X{
    (x.name :> a)
}

, но это возвращает набор A, пока я хочу набор X

Ответы [ 2 ]

1 голос
/ 03 ноября 2019

Вы можете сделать это проще:

name.a

возвращает набор X, которые отображаются под именем, элементу в.

Проверка эквивалентности вашей версии:

sig A { }
sig X {
  name: set A
  }

fun get [a:A] : set X{
    ((X <: name) :> a).A
}

fun get' [a:A] : set X{
    name.a
}

check {
  all a: A | get[a] = get'[a]
}
0 голосов
/ 03 ноября 2019

Это работает, надеюсь, кому-то будет полезно:

fun get[a:A] : set X{
    ((X <: name) :> a).A
}
...