В этом примере показано, как использовать семантику Мили для моделирования торгового автомата.
В этом примере торговый автомат требует 15 центов, чтобы освободить банку соды. Покупатель может вставить никель или копейку, по одному, для приобретения газировки. График ведет себя как машина Мили, потому что его выход soda
зависит как от входной монеты, так и от текущего состояния:
Когда начальное состояние got_0
активно. Монета не получена, монеты не оставлены.
Если получен никель (coin == 1
), выход soda
остается 0, но состояние got_nickel
становится активным.
Если получен дайм (coin == 2
), выход soda
остается 0, но состояние got_dime
становится активным.
Если входная монета не является дном или никелем, состояние got_0
остается активным, и никакая сода не освобождается (вывод soda = 0
).
В активном состоянии got_nickel
. Был получен никель.
Если получен другой никель (coin == 1
), состояние got_dime
становится активным, но никакое не может быть освобождено (soda
остается в 0).
Если получен дайм (coin == 2
), банка освобождается (soda = 1
), монеты покрываются, и активное состояние становится got_0
потому что монет не осталось.
Если входная монета не является дном или никелем, состояние got_nickel
остается активным, и никакое не может быть освобождено (вывод soda = 0
).
В активном состоянии got_dime
. Получена копейка.
Если получен никель (coin == 1
), банка освобождается (soda = 1
), монеты покрываются, и активное состояние становится got_0
потому что монет не осталось.
Если получен дайм (coin == 2
), банка освобождается (soda = 1
), 15 центов покрываются, и активное состояние становится got_nickel
потому что никель (изменение) оставлен.
Если входная монета не является дном или никелем, состояние got_dime
остается активным, и никакое не может быть освобождено (вывод soda = 0
).
Этот пример торгового автомата Мили иллюстрирует эти правила проекта Мили:
График вычисляет выходы в действиях условия.
Нет состояний активности или переходных действий.
График определяет входы графика (coin
) и выходы (soda
).
Значение входа coin
определяет выход: освобождена ли сода.