У меня есть следующие подписи:
sig Id, Grade {}
sig Foo {
result : Id -> Grade
}
Теперь я хочу создать функцию, которая принимает переменную foo и возвращает все связанные отношения Foo -> Grade:
fun results[ id : Id ]: Foo -> Grade {
//return all Foo->Grade binary relationships such that "id -> grade" in Foo.result
}
i.e.
Итак, если отношение «результат» такое:
(foo0, id0, grade0)
(foo0, id1, grade0)
(foo0, id2, grade1)
(foo1, id0, grade2)
(foo1, id3, grade3)
(foo2, id0, grade0)
и я запускаю функцию "результаты [id0]", я бы получил:
(foo0, grade0)
(foo1, grade2)
(foo2, grade0)
Теперь я думаю, что я бы использовал какое-то понимание набора, но проблема в том, что понимание набора работает только с унарными наборами, а не с бинарными наборами.