prepress-tips
形式手法モデル理論アプローチ
最終更新:
prepress-tips
-
view
狼・山羊・キャベツの川渡し問題を perlや javascriptを使って 形式手法モデル理論アプローチで 解く。
最終更新日時: 2008/10/28
形式手法とその利点
- オブジェクト指向は、モジュールを外部から見たときの挙動に関して とても詳しい情報を与えてくれるが、その内部構造に関しては 何の情報も与えてくれない。
- UMLによるモデリングも同様で、いざコードを作ろうとすると ─ はて?─ と戸惑うことになる。
- 形式手法は、モジュール内部の構造がどう記述されなくてはならない という指針を 明快に与えてくれるので、構造はわかりやすく 機械的にコードを作ることすら可能である。
- if や for をあまり使う必要がなく この面で悩まされることが少ない。
- 大規模なプログラムに適用されることが多いようであるが、perlや javascriptで書く テストも作らないような 小規模のプログラムにも十分有効である。
- プログラムの 異なる言語間の移植にも とても有用に思われる。
- 形式手法の教科書は 『形式手法 モデル理論アプローチ』 高原他著 日科技連刊
- 集合やオートマトンなどの用語が並んでいるが、プログラミング経験豊富なら
3章の始めの1節と 5章の始めの2節に目を通せば おおよその把握はできる。 - 先に このページの wgc2.pl ソースを見るのも よいかも。
- この頁よりもっと実際的なサンプルを作成中。
→ 形式手法モデル理論アプローチ 2 形式手法モデル理論アプローチ 3 - この方法の応用を検討中。 → 対話・検索・選択によるプログラミング
- 集合やオートマトンなどの用語が並んでいるが、プログラミング経験豊富なら
狼・山羊・キャベツの川渡し問題とは
- 狼・山羊・キャベツの川渡し問題とは、古典的なパズルのようで 次のような問題。
農夫が狼・山羊・キャベツと一緒に川の左岸におり、 これらを川の右岸へ運ばなくてはいけないのだが、 ボートにはこれらのうち1つしか乗せることができず、 狼は山羊を好んで食べるので 狼・山羊を同じ岸に放置できず、 山羊はキャベツを好んで食べるので 山羊・キャベツも同じ岸に放置できない。 ただし ボートに農夫だけが乗ることは許される。 この条件で すべてを右岸へ運ぶ手順を求めるという問題。
perlで 狼・山羊・キャベツの川渡し
- まずは 教科書通りに作成。
実行は perl wgc.pl 。
テスト用の汎用バッチファイル( test.bat )を wgc.bat にリネームして実行してもよい。
- Set( 集合 )の操作 と goal_seeker は 多くの問題に共通に使えるので
─ 問題を記述するだけで 解法プログラムができあがる ─ ということになる。 - そして perlなら、集合もオブジェクトも使わずに 記述できるはず。
- ブラウザから perlscriptで 動かす。
※ html中の < と & はすべて半角に置換すること。
※ perlscriptは コマンドラインからも動く( 実行は perl wgc_pls.pl )。
javascriptで 狼・山羊・キャベツの川渡し
- javascript に書き直してみた( perlとほとんど同じように書けるので )。
※ html中の < と & はすべて半角に置換すること。
- 実際にブラウザで試してみる → wgc_js.html ( 実行ボタンをクリックしてみてください )
perlscriptを javascriptに書き換える要領
- perlscriptを javascriptに書き換えるのは 結構面倒なので その要領をまとめておく。