Получение предмета по дате в Alloy
Я застрял в этой формальной проблеме домашней работы методов, и я не уверен, что я не получаю права.
У меня есть две подписи, Item и ToDo, которые определены так:
sig Item {
due : Date lone -> Step,
category : Category lone -> Step
}
one sig ToDo {
list : (seq Item) -> Step,
current : Item lone -> Step,
completed : Item -> Step
}
Я должен определить функцию, которая вставляет элемент с заданной датой и категорией в список задач. Хитрость в том, что список должен быть упорядочен по сроку поставки. Существует порядок как на шаге, так и на дате.
Мой вопрос: как мне получить набор элементов в ToDo.list с определенной датой? У меня есть функция:
fun tasksWithDate[d : Date, st : Step, t : set Item]: set Item
И я попытался использовать следующий код (и его варианты), чтобы получить набор Item:
t.due.st.d
Это не работает, и я понимаю, почему, потому что t.due.st оставляет набор дат. Однако другие попытки с этой точки зрения не приводят меня туда. Я попытался использовать скобки, чтобы получить его, чтобы оценить соединение между "due.st" и "d", прежде чем перейти к t, но это не работает, и я попытался использовать квадратные скобки, чтобы изменить порядок, но это не работает Я знаю, что делаю что-то не так, но не могу понять, что.
1 ответ
Решение, которое я придумал, заключается в следующем:
let r = t -> t.due.st {
r.d
}
То, что это делает, создает набор отношений t к дате исполнения t. Затем он выполняет объединение с желаемой датой, возвращая все t с этой датой.