atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
prepress-tips
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
prepress-tips
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
prepress-tips
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • prepress-tips
  • 形式手法モデル理論アプローチ

prepress-tips

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

最終更新:2008年10月28日 12:50

prepress-tips

- view
管理者のみ編集可
 狼・山羊・キャベツの川渡し問題を perlや javascriptを使って 形式手法モデル理論アプローチで 解く。
最終更新日時: 2008/10/28   
  • 形式手法とその利点
  • 狼・山羊・キャベツの川渡し問題とは
  • perlで 狼・山羊・キャベツの川渡し
  • javascriptで 狼・山羊・キャベツの川渡し
  • perlscriptを javascriptに書き換える要領
Edit

形式手法とその利点

  • オブジェクト指向は、モジュールを外部から見たときの挙動に関して とても詳しい情報を与えてくれるが、その内部構造に関しては 何の情報も与えてくれない。
  • UMLによるモデリングも同様で、いざコードを作ろうとすると ─ はて?─ と戸惑うことになる。
  • 形式手法は、モジュール内部の構造がどう記述されなくてはならない という指針を 明快に与えてくれるので、構造はわかりやすく 機械的にコードを作ることすら可能である。
  • if や for をあまり使う必要がなく この面で悩まされることが少ない。
  • 大規模なプログラムに適用されることが多いようであるが、perlや javascriptで書く テストも作らないような 小規模のプログラムにも十分有効である。
  • プログラムの 異なる言語間の移植にも とても有用に思われる。
  • 形式手法の教科書は 『形式手法 モデル理論アプローチ』 高原他著 日科技連刊
    • 集合やオートマトンなどの用語が並んでいるが、プログラミング経験豊富なら
      3章の始めの1節と 5章の始めの2節に目を通せば おおよその把握はできる。
    • 先に このページの wgc2.pl ソースを見るのも よいかも。
    • この頁よりもっと実際的なサンプルを作成中。
        → 形式手法モデル理論アプローチ 2 形式手法モデル理論アプローチ 3
    • この方法の応用を検討中。 → 対話・検索・選択によるプログラミング

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

  • 狼・山羊・キャベツの川渡し問題とは、古典的なパズルのようで 次のような問題。
  農夫が狼・山羊・キャベツと一緒に川の左岸におり、
  これらを川の右岸へ運ばなくてはいけないのだが、
  ボートにはこれらのうち1つしか乗せることができず、
  狼は山羊を好んで食べるので 狼・山羊を同じ岸に放置できず、
  山羊はキャベツを好んで食べるので 山羊・キャベツも同じ岸に放置できない。
  ただし ボートに農夫だけが乗ることは許される。
  この条件で すべてを右岸へ運ぶ手順を求めるという問題。 

perlで 狼・山羊・キャベツの川渡し

  • まずは 教科書通りに作成。
    実行は perl wgc.pl 。
    テスト用の汎用バッチファイル( test.bat )を wgc.bat にリネームして実行してもよい。
wgc.pl
test.bat
  • Set( 集合 )の操作 と goal_seeker は 多くの問題に共通に使えるので
    ─ 問題を記述するだけで 解法プログラムができあがる ─ ということになる。
  • そして perlなら、集合もオブジェクトも使わずに 記述できるはず。
wgc2.pl

  • ブラウザから perlscriptで 動かす。
    ※ html中の < と & はすべて半角に置換すること。
    ※ perlscriptは コマンドラインからも動く( 実行は perl wgc_pls.pl )。
wgc.html
wgc_pls.pl

javascriptで 狼・山羊・キャベツの川渡し

  • javascript に書き直してみた( perlとほとんど同じように書けるので )。
    ※ html中の < と & はすべて半角に置換すること。
wgc_js.html
wgc.js
  • 実際にブラウザで試してみる → wgc_js.html ( 実行ボタンをクリックしてみてください )

perlscriptを javascriptに書き換える要領

  • perlscriptを javascriptに書き換えるのは 結構面倒なので その要領をまとめておく。
perlscriptを javascriptに書き換える要領
  1. コメントの # を // に置き換える。
  2. ローカル変数の my を var に置き換える。
  3. 関数の sub を function に置き換える。
  4. 関数の引数を定義するために { の前に () を挿入する。
  5. 関数の戻り値の前に return を挿入する。
  6. 関数の引数を書き換える( $_[0], @_ など )。
    • 不定長の引数の受け渡しには 関数名.arguments を使う。
  7. map は for を使った表現に書き変える。
  8. for( @array ) { $_ } は for( i in array ) { array[ i ] } に書き変える。
  9. 文字列結合の . は + を使った表現に書き換える。
  10. eq は == に書き換える。
  11. メソッドの -> は . に書き変える。
    • 連想配列の {} は [] に書き変える。
    • オブジェクトのプロパティは . に書き変える。
  12. 関数は メソッドの表現に書き換える。
    • 適用順が逆になるので注意。
  13. 関数の呼び出しには 必ず () を付ける。
  14. 変数の $ を削除する。
    • 文字列中にあるときは + を使った表現に書き換える。
  15. 配列の @ を削除する。
    • スカラコンテキストは .length を使った表現に書き換える。
    • push, pop, join などは .push() .pop() .join() に書き換える。
  16. 連想配列の % を削除する。
  17. 配列・連想配列の定義を new Array() を使った表現に書き換える。
    • 暗黙の配列の定義に new Array() を追加する。
    • perlの 空配列 () は null を使った表現に書き換える。
  18. 連想配列への undef の代入を delete に書き換える。
  19. 正規表現を書き換える。
    • match()
      • マッチしない場合 null が返る。
      • マッチした場合 gの指定がないとき 最初にマッチした文字列が返る。
      • マッチした場合 gの指定があるとき 配列が返る。
    • replcae()
      • a =~ s/[$x]/y/g ならば a.replace( new RegExp( "[" + x + "]", "g" ), "y" )
      • a =~ s/(x)(y)/$&$1$2/g ならば
           a.replace( /(x)(y)/g, function( s, m1, m2 ){ return s + m1 + m2; } )
  20. 不要の () を削除する。
  21. && || のところを 必要に応じ if() {} を使った表現に書き換える。
  22. true false の変わりに 1 0 を使っているところなどを 注意深く修正する。
  23. 書き換えが終わったら 下記の構造を使って 未確認ソースを少しずつ減らしていく。
確認済ソース
alert( "load: ok" );
/*
   未確認ソース
*/

Edit

「形式手法モデル理論アプローチ」をウィキ内検索
LINE
シェア
Tweet
prepress-tips
記事メニュー
メニュー

更新履歴

取得中です。


記事メニュー2
右メニュー
  • トップページ
  • 旧トップページ
  • メニュー
  • 右メニュー
  • バックアップ


人気記事ランキング
  1. ImageJプラグインの作成 その2
  2. usb knoppix
  3. ソフト/wz_jsgraphics.js
  4. ImageJプラグインの作成
  5. 作成中
  6. 構造と処理を別の言語で書いて組合せる
  7. テスト
  8. サーバ/knoppix/nmap
  9. pdfファイルの調査
もっと見る
最近更新されたページ
  • 3840日前

    codeLayouter の記述メモ3
  • 3840日前

    トップページ
  • 5298日前

    codeLayouterを perlxsで使う
  • 5431日前

    GTK+ で openCV
  • 5432日前

    codeLayouter ver 0.03
  • 5438日前

    codeLayouter の記述メモ2
  • 5499日前

    ubuntu LiveUSB 3
  • 5571日前

    codeLayouter の記述メモ
  • 5613日前

    applescriptの編集
  • 5695日前

    ubuntu LiveUSB 2
もっと見る
人気記事ランキング
  1. ImageJプラグインの作成 その2
  2. usb knoppix
  3. ソフト/wz_jsgraphics.js
  4. ImageJプラグインの作成
  5. 作成中
  6. 構造と処理を別の言語で書いて組合せる
  7. テスト
  8. サーバ/knoppix/nmap
  9. pdfファイルの調査
もっと見る
最近更新されたページ
  • 3840日前

    codeLayouter の記述メモ3
  • 3840日前

    トップページ
  • 5298日前

    codeLayouterを perlxsで使う
  • 5431日前

    GTK+ で openCV
  • 5432日前

    codeLayouter ver 0.03
  • 5438日前

    codeLayouter の記述メモ2
  • 5499日前

    ubuntu LiveUSB 3
  • 5571日前

    codeLayouter の記述メモ
  • 5613日前

    applescriptの編集
  • 5695日前

    ubuntu LiveUSB 2
もっと見る
ウィキ募集バナー
急上昇Wikiランキング

急上昇中のWikiランキングです。今注目を集めている話題をチェックしてみよう!

  1. ゆるキャラ百科事典「ゆるペディア」
  2. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  3. beatmania IIDX SP攻略 @ wiki
  4. 東方同人CDの歌詞@Wiki
  5. グランツーリスモWiki
  6. モンスター烈伝オレカバトル@wiki
  7. イナズマイレブン 染岡さんと愉快な仲間たち wiki
  8. SQ用語辞典
  9. 魔法科高校の劣等生Wiki
  10. p5x 攻略wiki @ ウィキ
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 初音ミク Wiki
  5. 発車メロディーwiki
  6. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  7. 検索してはいけない言葉 @ ウィキ
  8. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  9. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
  10. オレカバトル アプリ版 @ ウィキ
もっと見る
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. まどドラ攻略wiki
  2. MadTown GTA (Beta) まとめウィキ
  3. シュガードール情報まとめウィキ
  4. R.E.P.O. 日本語解説Wiki
  5. SurrounDead 攻略 (非公式wiki)
  6. Dark War Survival攻略
  7. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  8. カツドンチャンネル @ Wiki
  9. Wplace Wiki
  10. AviUtl2のWiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. 我孫子 清十郎 - ストグラ まとめ @ウィキ
  3. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  4. ウイングガンダムゼロ【EW】 - 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  5. 稼ぎ - 地球防衛軍6 @ ウィキ
  6. ミッション攻略 - 地球防衛軍6 @ ウィキ
  7. ウイングガンダムゼロ【EW】/ログ1 - 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  8. 不幸な少女03 - 検索してはいけない言葉 @ ウィキ
  9. サーヴァント/一覧/クラス別 - Fate/Grand Order @wiki 【FGO】
  10. MOZU - ストグラ まとめ @ウィキ
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.