Я новичок в Alloy.Я хочу моделировать IFTTT из сплава.В IFTTT есть одно событие триггера и одно событие действия.Можно связать его различные онлайн-приложения друг с другом, используя IFTTT.Триггер - это причина события, а действие - результат триггера.Один триггер и одно действие объединяет рецепт.Итак, я начинаю с одного рецепта .Во-первых, я выбрал, когда человек выходит из зоны, Пайпер будет вооружаться.Пока что я написал следующий код.Но я не уверен, правильно это или нет.
abstract sig Service{
name: String,
statusList: some String,
triggerList: some Trigger,
actionList: some Action
}
sig Account{
email: String,
userid: String
}
sig Location extends Service{
}{
name = "Location Service"
statusList = "inside home"
}
pred exitAnArea[location: Location, tr: Trigger]{
location.statusList = "outside home"
tr.tri_attrib = "exit an area triggered"
}
sig Piper extends Service{
}{
name = "Piper Service"
statusList = "disarm"
}
pred armPiper[piper: Piper, ac: Action]{
piper.statusList = "arm"
ac.ac_attrib = "value chg"
}
abstract sig Trigger{
name: String,
tri_attrib: String
}
abstract sig Action{
name: String,
ac_attrib: String
}
sig Receipe{
name: String,
trigger: Trigger,
action: Action,
triggerService: Service,
actionService: Service
}
//exit an area, arm piper
pred executeFirstReceipe{
one tr_service: Location, ac_service: Piper, trigger:Trigger, action: Action
| exitAnArea[tr_service, trigger] => armPiper[ac_service, action]
}
run {}