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月29日 16:40

prepress-tips

- view
管理者のみ編集可
最終更新日時: 2008/10/29   
  • perlで 狼・山羊・キャベツの川渡し
    • 最初の対話
    • 2回目の対話
    • 3回目の対話
    • 4回目の対話
    • 最後の対話
    • 完成したソース
  • ソースの書式を変えてみる
    • 書き換えルール
    • 書き換えの利点
    • 書き換えを戻すスクリプト
Edit
  • 形式手法モデル理論アプローチを利用すれば プログラムの内部構造に立ち入って ライブラリを利用することができる。
    そのようなライブラリの利用を前提とした対話的プログラミングを考えてみる。
    ※ ここで使っているソースの詳細は 形式手法モデル理論アプローチ 3 を参照してください。

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

最初の対話

  • mainで 何をしますか?
    • title を表示する。
    • Wgc問題を解く。
    • 解いた結果 answer を表示する。
    • 終了。
  • title はどんな方法で表示しますか?
    • ここでライブラリを検索して いろいろな説明などを読み
      msgで表示する方法を選ぶとする。
  • Wgc問題はどんな方法で解きますか?
    • ここでもライブラリを検索し いろいろな説明などを読んで
      goal_seekerで解く方法を選ぶとする。
  • 解いた結果はどんな方法で表示しますか?
    • 先ほどと同じく msgで表示する方法を選ぶとする。

ここまでで 次のソースができる。
 

ライブラリから次のソースを読み込む。
 

未解決の部分は次のようになる。
 

これでエラーは出ないが 確認のため 次のようにしておく。
 

これで実行すれば ソースに問題のないことが確認できる。

2回目の対話

  • title は?
    • Wgc問題の title
  • answer は?
    • Wgc問題の answer
  • Wgc問題について ‥
  • title は?
    • '狼・山羊・キャベツの川渡し問題'
  • answer は?
    • @answer
  • 状態とするものは?
    • 川の左側を 文字列で表したもの
  • 初期状態は?
    • "wgcf"
    • ここで @answer を初期化しておく
  • 状態を文字列でユニークに表現する方法を用意する必要があります。
    その方法は?
    • ここでライブラリを検索し uniqueを選ぶとする。

ここまでで 次のソースができる。
 

ライブラリから次のソースを読み込む。
 

未解決部分は次のようにしておく。
 

これらを前のソースに追記すると、未解決部分はオーバーライドされ、
これで実行すれば ソースに問題のないことが確認できる。

3回目の対話

  • Wgc問題について ‥
  • ゴールは?
    • ""
  • ゴールですることは?
    • 状態の推移を 文字列に変えて 解に追加する
  • 状態の推移は?
    • @sequence
    • @sequence は 初期状態で初期化しておく
  • 文字列に変える方法は?
    • "answer: ".join ' → ', @sequence

これでソースは次のようになり
 

未解決部分は次のようにする。
 

これらを前のソースに追記し実行すれば ソースに問題のないことが確認できる。

4回目の対話

  • Wgc問題について ‥
  • 新しい状態ですることは?
    • 状態を状態の推移に記録する
  • 前の状態に戻すには?
    • 状態の推移の最後の記録を消す

これでソースは次のようになり
 

未解決部分は次のようにする。
 

これらを前のソースに追記し実行すれば ソースに問題のないことが確認できる。

最後の対話

  • Wgc問題について ‥
  • ある状態で実行できることは?
    • 状態に"f"が含まれれば 状態を1文字ずつに分けたもの
      そうでないならば 状態に含まれない文字を1つずつに分けたもの
  • ある状態で実行できることを実行したあとの状態は?
    • 状態に"f"が含まれないならば 状態に"f"と実行するものを加える
      そうでないならば 状態から"f"と実行するものを除く
  • 状態が満たさなくてはいけないことは?
    • 状態に"f"が含まれれば
      状態に "w","g"のどちらがあり かつ "g","c"のどちらかがあること
      ( 両方あってもよい )
      そうでないならば
      状態に "w"と"g"がともにはなく かつ "g"と"c"がともにはない こと

これでソースは次のようになり
 

未解決部分はなく 対話は終了。
これを前のソースに追記し実行すれば ソースに問題のないことが確認できる。

完成したソース

オーバーライド部分を削除して 最終的にできたソースは次のようになる。
 

ソースの書式を変えてみる

書き換えルール

ソースの記述のしかたを 次のようなルールで 書き換えてみる。
{                         ? main
   proc           ←→        proc
}

sub name {                ? name
   proc           ←→        proc
}

{ package name;           ? package name
    func          ←→        func
1; }

@name;            ←→    ? @name

先ほどのソースは 次のように書き換えられる。
wgc.txt

書き換えの利点

  • 対話がソースに反映され メンテナンスしやすくなる。
  • プログラムの構造に関して 言語特有の表現が除去される。
  • その結果 ‥
  • 他言語への変換がしやすくなる。
  • プログラムの構造を 言語に依存せずに 確認することができる。
  • 違う言語のプログラムを 組み合わせて使う 可能性が増える。
 のでは なかろうか?

書き換えを戻すスクリプト

  • 書き換えたテキストをソースに戻すスクリプトは 次の通り。
    • goal_seekerで使わない関数をコメントアウトしました。
    • 使うときは IN の前の < を半角に変えてください。
    • 使い方の例:
         perl txt_to_pl.pl wgc.txt > wgc.pl
txt_to_pl.pl
  • このテーマは役立ちそうなので もう少し調べる。→ ソースの書式を変えてみる

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の編集
  • 5696日前

    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の編集
  • 5696日前

    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.