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

prepress-tips

codeLayouter の記述メモ3

最終更新:2015年02月24日 01:07

prepress-tips

- view
管理者のみ編集可
最終更新日時: 2015/02/24   
 
  • codeLayouter再検討の発想で直接記述できる言語が登場したよう。
  • codeLayouter再検討の発想で直接記述できる言語が登場したよう。
Edit

codeLayouter再検討の発想で直接記述できる言語が登場したよう。

  • コード の記述の方針
    • プログラムの構造 + 実コードへの展開 という形で記述する。
    • プログラムの構造が そのままアノテーションとなるように 記述する。
    • オブジェクト指向風 に記述する。
    • アノテーション は アノテーションの世界で 閉じる。
  • 使う言語は dg言語( python3上のモジュールとして動く )。
    • dg — it's a Python! No, it's a Haskell!
    • Haskell構文で Python3のプログラミングができる。
      • 詳しい使い方は tutorial
      • Tips と サンプル は learn-dg

wgc.dg
# coding: utf-8

# 狼・山羊・キャベツの川渡し問題 を解く

# 変数 /
import '/wgc_detail',
    wgc_detail.to_globals globals! wgc_detail
    # ログ, オプション, デバグ
    # 状態, いる, カウント, 更新, 連れ
    # 履歴, 解答

# 概要 /
main = ->
    ログ_オプション入力!, ログ_開始!
    状態_初期化!, 履歴_初期化!, 解答_初期化!, 探索!
    解答_表示!

# 処理 /
探索 = -> while True =>
    履歴_一度あった!  => ログ_一度あった!, break!
    状態_ゴール!      => ログ_ゴール!, 解答_記録!, break!
    状態_制約満たさず! => ログ_制約満たさず!, break!
    連れ_ていける! |> map ( それ ->
        履歴_追加!, 連れ_ていった それ,
        履歴_表示!, 連れ_表示 それ, 状態_表示!,
        ログ_待機!,
        探索!,
        履歴_削除!
    ) |> list
    break!

__name__ == '__main__' => main!

wgc_detail.dg
# coding: utf-8

import '/sys'
import '/re'

to_globals = main this ->
    fh = [ 'ログ', '状態', '連れ', '履歴', '解答' ]
    fn = globals! |> filter ( n -> re.sub '_.*' '' n in fh )
    fn |> map ( n -> main !! n = getattr this n ) |> list

#----------------------------------------------------------
# ログ, オプション, デバグ

オプション' = ['',]
オプション  = -> head オプション'
デバグ指定 = '(?i)d'

デバグ' = [False,]
デバグ  = -> head デバグ'

ログ_オプション入力 = ->
    オプション' !! 0 = except ( err => sys.argv !! 1 )( err => '' )
    デバグ'    !! 0 = re.search デバグ指定 オプション! |> bool

ログ_開始       = -> print '狼・山羊・キャベツの川渡し問題 を解く',
                    デバグ! => print '‥‥'
ログ_一度あった  = -> デバグ! => print '   X 一度あった'
ログ_ゴール      = -> デバグ! => print '  === ゴール ==='
ログ_制約満たさず = -> デバグ! => print '   X gw か cg'
ログ_待機        = -> デバグ! => '‥‥' |> input

#----------------------------------------------------------
# 状態, いる, カウント, 更新, 連れ

状態' = ['',]
状態  =   -> 状態' !! 0
状態_ = v -> 状態' !! 0 = v

状態_初期化   = -> 状態_ 'fwgc', 状態_一意表現!
状態_一意表現 = -> 状態_ $ ''.join ( 状態! |> sorted )

更新_削除 = o -> 状態_ $ ''.join ( set 状態! - set' o 'f' ),
                 状態_一意表現!
更新_追加 = o -> 状態_ $ 状態! + ''.join ( set' o 'f' ),
                 状態_一意表現!

状態_ゴール   = -> 状態! == ''
状態_制約満たさず = -> not $ if
    いる_f!  => カウント_wg! != 0 and カウント_gc! != 0
    otherwise => カウント_wg! != 2 and カウント_gc! != 2
状態_表示  = -> デバグ! => print $ '状態 ' + 状態!

いる_f =   -> 状態! .find 'f' >= 0
いる_o = o -> 状態! .find o   >= 0

カウント_wg = -> re.findall '[wg]' 状態! |> len
カウント_gc = -> re.findall '[gc]' 状態! |> len

連れ_すべて = 'fwgc'
連れ_ていける = -> list <| if
    いる_f!   => 状態!
    otherwise => set 連れ_すべて - set 状態!
連れ_ていった = o -> if
    いる_f!  => 更新_削除 o
    otherwise => 更新_追加 o
連れ_表示 = o -> デバグ! => print '連れ' o

#----------------------------------------------------------
# 履歴, 解答

履歴 = []
解答 = []

履歴_初期化    = -> 履歴 .clear!
履歴_一度あった = -> 状態! in 履歴
履歴_追加      = -> 履歴 .append 状態!
履歴_表示      = -> デバグ! => print $ '履歴 ' + ' → '.join 履歴
履歴_削除      = -> 状態_ 履歴.pop!

解答_記録   = -> 解答 .append $ '  ' + ' → '.join ( 履歴 + [状態!,] )
解答_初期化 = -> 解答 .clear!
解答_表示   = -> print '解答:', print $ '\x0a'.join 解答

Edit

「codeLayouter の記述メモ3」をウィキ内検索
LINE
シェア
Tweet
prepress-tips
記事メニュー
メニュー

更新履歴

取得中です。


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


人気記事ランキング
  1. 構造と処理を別の言語で書いて組合せる 3
もっと見る
最近更新されたページ
  • 3905日前

    codeLayouter の記述メモ3
  • 3905日前

    トップページ
  • 5363日前

    codeLayouterを perlxsで使う
  • 5496日前

    GTK+ で openCV
  • 5497日前

    codeLayouter ver 0.03
  • 5503日前

    codeLayouter の記述メモ2
  • 5564日前

    ubuntu LiveUSB 3
  • 5636日前

    codeLayouter の記述メモ
  • 5678日前

    applescriptの編集
  • 5760日前

    ubuntu LiveUSB 2
もっと見る
人気記事ランキング
  1. 構造と処理を別の言語で書いて組合せる 3
もっと見る
最近更新されたページ
  • 3905日前

    codeLayouter の記述メモ3
  • 3905日前

    トップページ
  • 5363日前

    codeLayouterを perlxsで使う
  • 5496日前

    GTK+ で openCV
  • 5497日前

    codeLayouter ver 0.03
  • 5503日前

    codeLayouter の記述メモ2
  • 5564日前

    ubuntu LiveUSB 3
  • 5636日前

    codeLayouter の記述メモ
  • 5678日前

    applescriptの編集
  • 5760日前

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

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

  1. 全裸でいかおどり@VIPPER支部
  2. 遊戯王DSNTナイトメアトラバドール攻略Wiki@わかな
  3. 異修羅非公式wiki
  4. ドラゴンクエスト モンスターバトルロードII攻略@WIKI
  5. ポケモン 作品なりきりネタWiki
  6. モンスター烈伝オレカバトル2@wiki
  7. シュガードール情報まとめウィキ
  8. EDF5:地球防衛軍5@Wiki
  9. アサルトリリィ wiki
  10. SDガンダム ジージェネレーションクロスレイズ 攻略Wiki
もっと見る
人気Wikiランキング

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

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

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

  1. MADTOWNGTAまとめwiki
  2. MadTown GTA (Beta) まとめウィキ
  3. 首都圏駅メロwiki
  4. まどドラ攻略wiki
  5. Last Z: Survival Shooter @ ウィキ
  6. シュガードール情報まとめウィキ
  7. ちいぽけ攻略
  8. ステラソラwiki
  9. 駅のスピーカーwiki
  10. 20XX @ ウィキ
もっと見る
全体ページランキング

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

  1. 参加者一覧 - MADTOWNGTAまとめwiki
  2. ブラック・マジシャン・ガール - アニヲタWiki(仮)
  3. 児童ポルノ 中国姉弟中学生近親相姦エロ動画 - 全裸でいかおどり@VIPPER支部
  4. 朕狼党 - MADTOWNGTAまとめwiki
  5. 【移転】Miss AV 見れない Missav.wsが見れない?!MissAV新URLはどこ?閉鎖・終了してない?missav.ai元気玉って何? - ホワイトハッカー研究所
  6. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  7. Z世代女子中学生のエロ動画だぉw - 全裸でいかおどり@VIPPER支部
  8. 参加者一覧 - ストグラ まとめ @ウィキ
  9. XVI - MADTOWNGTAまとめwiki
  10. 真崎杏子 - 遊戯王DSNTナイトメアトラバドール攻略Wiki@わかな
もっと見る

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

2019 AtWiki, Inc.