ロールバック

23.2.4. ロールバック

やり直しを許すように拡張してみましょう.

電子錠の改良 #

ここまで完成させたオートマトンは,一度でも誤った入力をすると「解錠失敗」と判定され,二度と開けることができないものでした.ここでは仕様を拡張して,途中でどんな間違いをしていても,最後にabacなら解錠するように変更します.

どのように変更すれば良いでしょうか. 誤った入力をした際には振り出しに戻ることにしてみましょう.具体的には「解錠失敗」状態を削除し,誤った入力の際には初期状態に遷移するようにします.

検証用自動テストの実行 #

2番目のテストである「Rollback automaton」を選択して「Test」をクリックしましょう.

結果は...

残念ながら,失敗作であることが判ります.

**FAILURE** <String:'aabac', Expected:final, Result:non-final> を読んでみましょう. 入力は「aabac」,期待される状態は 終了状態(final),実際には非終了状態(non-final) という不一致ですね. 他も確認してください.

オートマトンの修正 #

入力 aabac を終了状態とするために,以下のように変更してみました.

結果は...

残念ながら,まだ修正が必要のようです.

FAILUREのケースを確認し修正してください.

各自で正しく修正して,すべてSUCCESSになれば,この練習は成功です.

動作検証 ロールバック 練習問題
このサイトは開発版の はいぱーワークブック です.