Это домашнее задание, и у меня есть много проблем с этим. Я использую сплав для моделирования библиотеки. Вот определения объектов:
sig Library {
patrons : set Person,
on_shelves : set Book,
}
sig Book {
authors : set Person,
loaned_to : set Person,
}
sig Person{}
, тогда нам нужно иметь факт, что государства, каждая книга либо на полке, либо вынимается покровителем. Однако они не могут быть в обоих местах.
// Every book must either be loaned to a patron or
// on the shelves.
fact AllBooksLoanedOrOnShelves {}
Я попробовал это ...
fact AllBooksLoanedOrOnShelves {
some b : Book {
one b.loaned_to =>
no (b & Library.on_shelves)
else
b in Library.on_shelves
}
}
Но это не работает ... Книги всегда находятся на полках. Хочешь сказать: «За каждую книгу, если она не одолживалась, это на полке. В противном случае это выходит».
Исправления, примеры и подсказки очень ценятся.