prepress-tips
メニュー

更新履歴

取得中です。


形式手法モデル理論アプローチ


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

 狼・山羊・キャベツの川渡し問題を perlや javascriptを使って 形式手法モデル理論アプローチで 解く。
最終更新日時: 2008/10/28    

形式手法とその利点

  • オブジェクト指向は、モジュールを外部から見たときの挙動に関して とても詳しい情報を与えてくれるが、その内部構造に関しては 何の情報も与えてくれない。
  • UMLによるモデリングも同様で、いざコードを作ろうとすると ─ はて?─ と戸惑うことになる。
  • 形式手法は、モジュール内部の構造がどう記述されなくてはならない という指針を 明快に与えてくれるので、構造はわかりやすく 機械的にコードを作ることすら可能である。
  • if や for をあまり使う必要がなく この面で悩まされることが少ない。
  • 大規模なプログラムに適用されることが多いようであるが、perlや javascriptで書く テストも作らないような 小規模のプログラムにも十分有効である。
  • プログラムの 異なる言語間の移植にも とても有用に思われる。
  • 形式手法の教科書『形式手法 モデル理論アプローチ』 高原他著 日科技連刊

狼・山羊・キャベツの川渡し問題とは

  • 狼・山羊・キャベツの川渡し問題とは、古典的なパズルのようで 次のような問題。
  農夫が狼・山羊・キャベツと一緒に川の左岸におり、
  これらを川の右岸へ運ばなくてはいけないのだが、
  ボートにはこれらのうち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に書き換えるのは 結構面倒なので その要領をまとめておく。