約 236,659 件
https://w.atwiki.jp/overture/pages/109.html
宝具展開 イベント EX:花 2 コスト:花花花 ターン終了時まで味方キャラ1体はダウンしない。 エキスパンション:Fate/Grand Order 1.0 レアリティ:【U】 ILLUSTRATION ふらすこ:LO-0090 考察 収録エキスパンション Fate/Grand Order 1.0【U】 Q A類 Q.【LO-0090 宝具展開】を使用したキャラは、バトルでダウンしませんが、その後、ターン終了後に破棄されますか? A.いいえ、バトルの解決時にダウン(破棄)されなければ、そのまま場に残ります。(17/03/11) その他 名前
https://w.atwiki.jp/genesis-ticket/pages/755.html
【系統】 術式 【名前】 霊魂展開術 【読み方】 ネクロマンス 【人物】 前田・利家が得意とする術式の種類。 マルファ・ボレツカヤも、市民の死体四人分を一体の動死体の兵士に作り替える、術式・影虎の使用など、霊魂展開術に通じているような節がある。 死者を呼び出す術式で、利家の場合は支払った対価に合わせて数が増える。 利家は織田・信長に与えられた 癒使 によってこの術式を強化、 加賀百万G として圧倒的物量戦を得意としている。 故人を強制的に幽霊にすることも可能で、自害した伊達・小次郎と駒姫を幽霊としてこの世に引き留めた。
https://w.atwiki.jp/ryuunabe/pages/1647.html
緊急展開軍 アイドレスWiKiの該当ページ 名称:緊急展開軍(職業) 要点:敬礼,輸送機,軍服 周辺環境:空港 評価:体格(評価3),筋力(評価3),耐久力(評価3),外見(評価0),敏捷(評価2),器用(評価3),感覚(評価4),知識(評価3),幸運(評価2) 特殊: *緊急展開軍の職業カテゴリは派生職業アイドレスとして扱う。 *緊急展開軍はI=Dに乗っていないとき、独自で近距離戦闘行為ができる。 *緊急展開軍はI=Dに乗っていないとき、独自で中距離戦闘行為ができる。この時、選択によって攻撃判定は評価+2できる。補正を選択した時は燃料1万tを必ず消費する。 *緊急展開軍はI=Dに乗っていないとき、独自で白兵戦闘行為ができる。 *緊急展開軍は援軍能力を持ち、政府の許可があればどの戦いにも参加できる。 *緊急展開軍は輸送部隊とともに臨時編成出来る。このとき一部隊あたり100億の資金を必要とする。 →次のアイドレス:軽装甲車の開発(イベント),エリート歩兵(職業),低物理域対応訓練(技術),新型芋(アイテム) 派生前 栄光の野戦炊飯具1号(AD枠)
https://w.atwiki.jp/zensensyu/pages/1989.html
馬鹿一展開 154 名前:水先案名無い人 :2006/06/07(水) 21 37 23 ID +xFtUN6k0 光成「馬鹿の一つ覚えな展開を見たいかーーーーッ」 観客「オーーーーーーーーーーーーーー!!!!」 光成「ワシもじゃ ワシもじゃみんな!!」 光成「馬鹿一入場!!!」 アナウンサー「全馬鹿一入場です!!!!」 全馬鹿一入場!! ラスボスは生きていた!! 更なる変身を重ね絶対悪が甦った!!! 魔神!! 「一度倒したラスボスが変身して復活」だァ――――!!! 結婚相手はすでに我々が決定している!! 「親同士の決めた婚約者が登場」だァ――――!!! 組み付きしだい落ちまくってやる!! 再登場フラグ代表 「敵を道連れに谷底に転落」だァッ!!! 素手の殴り合いなら我々の歴史がものを言う!! 川原の殴り合い ダブルノックアウト 「喧嘩で芽生える友情」!!! 真の非道を知らしめたい!! 復讐フラグ 「主人公が親を目の前で殺される」だァ!!! ボクシングは3階級制覇だがケンカなら全階級オレのものだ!! 噛ませ犬の代表格 「やたら肩書きの立派なキャラ」だ!!! ラブコメ対策は完璧だ!! 超古典的 「曲がり角で転校生とぶつかる」!!!! 全戦闘のベスト・ディフェンスは私の中にある!! 復活の神様が来たッ 「所持金半分で復活」!!! タイマンなら絶対に敗けん!! 主人公の決闘見せたる 王道燃え展 「ライバルと一騎討ち」だ!!! バーリ・トゥード(なんでもあり)ならこいつが怖い!! 戦場のクレイジー・ファイター 「雑魚集団を虐殺する狂戦士」だ!!! 難破船から気絶中の主人公が上陸だ!! サバイバル 「海難事故で無人島へ」!!! ルールの無いケンカがしたいから闇の力に染まったのだ!! ライバルの意地を見せてやる!!「力を求めて黒化するライバル」!!! めい土の土産に貴様の命とはよく言ったもの!! 達人の奥義が今 実戦でバクハツする!! 奥義伝承 「ラスボスと刺し違えようとする師匠」だ―――!!! ヒロインの料理こそが地上最凶の代名詞だ!! まさかこの展開がきてしまうとはッッ 「ヒロイン作の産業廃棄物級手料理」!!! 闘いたいからここまできたッ キャリア一切不明!!!! フード姿のピット(意外な)ファイター 「トーナメントを勝ち上がる無名の強者」だ!!! か、勘違いしないでよ! 私たちはラブコメ最強じゃなくて、全ての展開で最強なんだから!! 御存知ツンデレ 「照れ隠しに怒るヒロイン」!!! 死亡フラグの本場は今や戦場にある!! オレと結婚する女はいないのか!! 「俺、この戦いが終わったら結婚するんだ」だ!!! おっぱァァァァァいッ説明不要!! 84cm!!! Cカップ!!! 「不可抗力でヒロインの胸を鷲掴み」だ!!! 魔術は実戦で使えてナンボのモン!!! 超実戦魔術!! 魔術ギルドから「異端として追われる魔術師」の登場だ!!! 美女はオレのもの 邪魔するやつは思いきり陥れ思いきり殺すだけ!! 好色なる王者 「臣下の妻に横恋慕して忠臣に謀反の疑い」 自分を治しに病院へきたッ!! 馴染みの闇医者 「裏路地の診療所で大怪我を治療」!!! 仮面に更なる磨きをかけ ”ミスターX”「実は生き別れの兄」が帰ってきたァ!!! 今の自分に死角はないッッ!! というか視覚が無い「盲目の剣士の心眼の見切り」!!! 隠し続けた秘密が今ベールを脱ぐ!! 嗜好から性別まで 「部屋を覗くと見えたのは~」だ!!! 惨事の前でならオレはいつでもパニックだ!! 燃える町並み 「秘めた能力に覚醒」 全開で登場だ!!! 館の仕事はどーしたッ 闘士の炎 未だ消えずッ!! 戦も掃除も思いのまま!! 「百戦錬磨のメイドや執事」だ!!! 特に理由はないッ 主人公が強いのは当たりまえ!! ヒロインにはないしょだ!!! 月下で開眼! 「必殺技を編み出す」がきてくれた―――!!! 暗黒街で磨いた実戦暗殺術!! 裏通りのデンジャラス・アサシン「一匹狼の暗殺者」だ!!! ラストバトルだったらこの展開を外せない!! 立ち止まる仲間 「塔の各階に待ち受ける因縁の敵たち」だ!!! 超一流魔法使いの超一流の戦闘だ!! 生で拝んでオドロキやがれッ 逆転の一手!! 「攻撃を避けながら足で魔法陣を描く」!!! ラストバトルはこの展開が完成させた!! 希望が切り札!! 「倒れた主人公、皆の思いを受けて立ち上がる」だ!!! 若き王者が帰ってきたッ どこへ行っていたンだッ チャンピオンッッ 俺達は君を待っていたッッッ「ハッピーエンド」の登場だ――――――――ッ 加えてベタ過ぎる展開に備え超豪華な嫌展キャラを4名御用意致しました! ふんぐるい むぐるうなふ クトゥルフ!! お願い、私の大切な人なの ヨヨ!! かみは ばらばらに なった! かみ! ……ッッ どーやらもう一名はパーティに復帰した模様ですが、寝返り次第ッ皆様にご紹介致しますッッ 関連レス 159 名前:水先案名無い人 :2006/06/07(水) 22 22 46 ID WpGS/Jws0 154-157 GJ! ほとんど、掌合わせて納得してしまった。 160 名前:水先案名無い人 :2006/06/07(水) 22 56 44 ID uvDIdz7+0 154-157 ツンデレとおっぱいオメガワロスwwww 最後のはひょっとしてガリことカイン? 161 名前:水先案名無い人 :2006/06/08(木) 00 09 04 ID VBaeYtlw0 ? >喧嘩で芽生える友情 >主人公が親を目の前で殺される >雑魚集団を虐殺する狂戦士 >トーナメントを勝ち上がる無名の強者 >照れ隠し >裏路地の診療所で大怪我を治療 >実は生き別れの兄 >秘めた能力に覚醒 バキだけでこんなに… 162 名前:水先案名無い人 :2006/06/08(木) 00 11 53 ID SX3ddQP60 >主人公が親を目の前で殺される バキはその時意識不明だったと思う >実は生き別れの兄 生き別れじゃなく腹違い 163 名前:水先案名無い人 :2006/06/08(木) 00 12 10 ID 3UXrVHFO0 >やたら肩書きの立派なキャラ も忘れちゃいかんぞ。 164 名前:水先案名無い人 :2006/06/08(木) 07 38 04 ID ydoqt+eB0 ツンデレも某海王がいるじゃないか 169 名前:水先案名無い人 :2006/06/08(木) 11 41 47 ID qB/6kwrk0 154-157 一気に入場されるとハッピーエンドすら嫌になるなw コメント 名前
https://w.atwiki.jp/chem-ota/pages/63.html
品質機能展開(QFD:Quality Function Deployment) 「製品に対する品質目標を実現するために、様々な変換および展開を用いる方法論」(JIS Q 9025 2003)。下記展開の総称。 品質展開 品質展開とは、「要求品質を品質特性に変換し、製品の設計品質を定め、各機能部品、個々の攻勢部品の品質、および工程の要素に展開する方法」 技術展開 技術展開とは、「設計品質を実現する機能が、現状考えられる機構で達成できるか検討し、ボトルネック技術を抽出する方法」のこと。 また、企業が保有する技術自体を展開することを技術展開と呼ぶことがある。 コスト展開 コスト展開とは、「目標コストを要求品質または機能に応じて配分することによって、コスト低減またはコスト上の問題点を抽出する方法」のこと 信頼性展開 信頼性展開とは、「要求品質に対し、信頼性上の保証項目を明確化する方法」のこと。品質展開がポジティブな要求品質の展開であるのに対して、ネガティブな故障などの予防に関して信頼性手法を活用し、設計段階でこの故障を予防する。 業務機能展開 業務機能展開とは、「品質を形成する業務を階層的に分析して明確化する方法」のこと ○品質表 a)要求品質展開表 b)品質特性展開表 c)二元表 d)企画品質設定表 e)設計品質設定表 f)品質特性関連表 詳しくは下記リンクに詳しい。 統計学 ご参考になれば幸いです。。。 トップページに戻る
https://w.atwiki.jp/clear_mind/pages/15.html
展開ルートまとめ 展開ルートまとめ概要 基本的な展開ルート 応用的な展開ルート その他 概要 展開ルートの詳細を記す。 基本的な展開ルート ジャンクドッペル01 場に《ジャンク・シンクロン》、《ドッペル・ウォリアー》からの展開ルート ジャンクドッペル02 場に《ジャンク・シンクロン》、《ドッペル・ウォリアー》、星1チューナーからの展開ルート サヨスチーム 場に《A BF-雨隠れのサヨ》、《BF-隠れ蓑のスチーム》、星1チューナーからの展開ルート 誘発ケア 先行で展開する際、手札誘発をケアする為の戦術・ルート 応用的な展開ルート 竜星スイッチ レシプロキャンセル 竜星ジャンクドッペル/展開ルート 閃刀ジャンクドッペル/展開ルート その他 ジャンクドッペル展開 手札《ジャンク・シンクロン》、墓地《ドッペル・ウォリアー》からの展開ルート ジャンクドッペル+α展開 手札《ジャンク・シンクロン》・《ドッペル・ウォリアー》、墓地「レベル2以下のモンスター」や手札《クイック・シンクロン》等からの展開ルート ジェットドッペル展開 手札《ジェット・シンクロン》・《ドッペル・ウォリアー》からの展開ルート アライブ展開 《ヒーローアライブ》から動く展開ルート ライティ展開 《ライティ・ドライバー》から動く展開ルート サイバース展開 手札《サイバース・ガジェット》、墓地「レベル2以下のチューナー」から動く展開ルート その他の展開ルート 《音響戦士ギータス》など、上記以外を軸とする展開ルート ロマン展開 EX枠10枠以上取る等の理由でデッキを専用で組まなければ行うのが難しい展開ルート 使用不能となったギミック
https://w.atwiki.jp/pawasaca/pages/85.html
効果 ピッチをワイドに使ったパスができるようになる 上位・下位コツ 最上位コツ マエストロ 上位コツ マエストロ 最下位コツ 展開力◯ 経験点 コツLv 筋力 敏捷 技術 精神 Lv.0 40 0 100 60 Lv.1 28 0 70 42 Lv.2 20 0 50 30 Lv.3 16 0 40 24 Lv.4 12 0 30 18 Lv.5 8 0 20 12 キャラ キャラ 碧流星 霧雨勝 黒百合白雪 角馬飛竜 紅観春 三雲燦
https://w.atwiki.jp/gensougisaku/pages/19.html
属性の展開(Expand Element) キャラクタカードを場に置くことで、自動的に発生するフィールドをさす。 属性が展開されると、隣り合った属性のみしか使用できなくなり、属性が異なるアトモスフィアカードやアタッチメントカードは即座に破壊される。 →詳細は属性の展開とはにて
https://w.atwiki.jp/yudaikato/pages/15.html
PHOTOSHOP 展開図作成 展開図表示 - object 選択し、Window → UV Texture Editor 展開図をPhotoshop に持ってく ( UV Texture Editor 内) - Polygon → UV snapshot →JPEG (小:512 x 512 pixel / 大:1024 x 1024 pixel ) PHOTOSHOP に行く - 上記素材を開く
https://w.atwiki.jp/fsharpmaster/pages/16.html
StatefulFuncはなぜ動くか for展開編(オマケ) 1.forを使ったループの導入 StateBuilderにはForメソッドがきちんと実装されており、計算式の中にforループを記述することができます。試してみましょう。 let calculatorActions = state { for i = 1 to 5 do do! Add i do! Multiply 3 } let res, stat = Run calculatorActions (0, []) これを実行すると、以下のような実行結果が得られます。 val calculatorActions StatefulFunc (int * string list),unit = StatefulFunc fun Delay@184-2 val stat int * string list = (45, ["3を乗算"; "5を加算"; "4を加算"; "3を加算"; "2を加算"; "1を加算"]) val res unit = () 素晴らしいほど期待通りですね。今回はこれがどのように展開されているかを見ていきましょう。 2.Add、Multiplyの展開 calculatorActions展開編と同様に、AddとMultiplyを「Add展開編」で出来上がった最後の式を使い展開します。ついでに加算には無理ですが積算のsprintfを適用しましょう。 let calculatorActions = state { for i = 1 to 5 do do! StatefulFunc(fun (currentTotal, history) - (), (currentTotal + i, (sprintf "%dを加算" i) history)) do! StatefulFunc(fun (currentTotal, history) - (), (currentTotal * 3, "3を積算" history)) } 3.return()の補完 今回は式がdo!で終わっているので、return ()を最後に補完します。また、実はforループの末尾にもreturn ()を補完しないとここから先の展開ができません。 let calculatorActions = state { for i = 1 to 5 do do! StatefulFunc(fun (currentTotal, history) - (), (currentTotal + i, (sprintf "%dを加算" i) history)) return () do! StatefulFunc(fun (currentTotal, history) - (), (currentTotal * 3, "3を積算" history)) return () } ここまでやったら、一度実行して結果が変わっていないことを確認しましょう。 4.ワークフロー展開 とりあえず頭を使わないで、returnの展開をします。ここまでは余裕ですね。コンパイル通りませんが。 let calculatorActions = state { for i = 1 to 5 do do! StatefulFunc(fun (currentTotal, history) - (), (currentTotal + i, (sprintf "%dを加算" i) history)) state.Return () do! StatefulFunc(fun (currentTotal, history) - (), (currentTotal * 3, "3を積算" history)) state.Return () } 続いて、二つのdo!を一気に展開します。 let calculatorActions = state { for i = 1 to 5 do state.Bind( StatefulFunc(fun (currentTotal, history) - (), (currentTotal + i, (sprintf "%dを加算" i) history)), (fun () - state.Return ()) ) state.Bind( StatefulFunc(fun (currentTotal, history) - (), (currentTotal * 3, "3を積算" history)), (fun () - state.Return ()) ) } 行が横に長くなるとWiki的に支障が出るため、fun (currentTotal, history) - の右に改行を入れていますが、実際に作業をする場合はこんなところに改行を入れないほうが作業を安全に進められると思います。 そしてforの展開をします。初めてですので展開ルールを見てみましょう。「実践F#関数型プログラミング入門」に記述がありますが、どう考えても間違っていて、以下のルールが正しいと思います。 for ident = expr1 to expr2 do expr3 ⇒ b.For(seq{expr1..expr2}, fun ident - expr3) さすがに要素が多いですが、ひるまずに機械的に作業をします。 let calculatorActions = state { state.For(seq{1..5}, fun i - state.Bind( StatefulFunc(fun (currentTotal, history) - (), (currentTotal + i, (sprintf "%dを加算" i) history)), (fun () - state.Return ()) ) ) state.Bind( StatefulFunc(fun (currentTotal, history) - (), (currentTotal * 3, "3を積算" history)), (fun () - state.Return ()) ) } 最後に、これは結構伏兵なのですが、forのブロックとそれ以降をつなぐ作業が必要になります。二つの式を遷移的に(前の作業が終わってから次をやるように)つなげる再は、Combineを使います。 trans-cexpr0; cexpr1 ⇒ b.Combine(trans-cexpr0, cexpr1) Bindを少し簡単にしたような感じでしょうか。 let calculatorActions = state.Combine( state.For(seq{1..5}, fun i - state.Bind( StatefulFunc(fun (currentTotal, history) - (), (currentTotal + i, (sprintf "%dを加算" i) history)), (fun () - state.Return ()) ) ), state.Bind( StatefulFunc(fun (currentTotal, history) - (), (currentTotal * 3, "3を積算" history)), (fun () - state.Return ()) ) ) これでひと段落です。コンパイルが通り、実行結果が変わらないことを確認します。 5.ワークフロー定義展開 CombineとForが一つずつ、BindとReturnが二つずつありますが、逃げないで! とりあえず、Returnの展開。 let calculatorActions = state.Combine( state.For(seq{1..5}, fun i - state.Bind( StatefulFunc(fun (currentTotal, history) - (), (currentTotal + i, (sprintf "%dを加算" i) history)), (fun () - StatefulFunc(fun initialState - (), initialState)) ) ), state.Bind( StatefulFunc(fun (currentTotal, history) - (), (currentTotal * 3, "3を積算" history)), (fun () - StatefulFunc(fun initialState - (), initialState)) ) ) その勢いで二つあるBindの展開。さすがに慣れてきました。 let calculatorActions = state.Combine( state.For(seq{1..5}, fun i - StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun (currentTotal, history) - (), (currentTotal + i, (sprintf "%dを加算" i) history))) initialState Run ((fun () - StatefulFunc(fun initialState - (), initialState)) result) updatedState ) ), StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun (currentTotal, history) - (), (currentTotal * 3, "3を積算" history))) initialState Run ((fun () - StatefulFunc(fun initialState - (), initialState)) result) updatedState ) ) 内側から、と言うことでForの展開。state.Forの関数定義は以下のようなものです。 member this.For( elements seq a , forBody ( a - StatefulFunc state, unit ) ) = StatefulFunc(fun initialState - let state = ref initialState for e in elements do let (), updatedState = Run (forBody e) (!state) state = updatedState (), !state ) さすがに長いですが、一つ目のシーケンスはseq{1..5}ですので、残り全部がforBodyです。 let calculatorActions = state.Combine( StatefulFunc(fun initialState - let state = ref initialState for e in seq{1..5} do let (), updatedState = Run ( (fun i - StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun (currentTotal, history) - (), (currentTotal + i, (sprintf "%dを加算" i) history))) initialState Run ((fun () - StatefulFunc(fun initialState - (), initialState)) result) updatedState ) ) e) (!state) state = updatedState (), !state ), StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun (currentTotal, history) - (), (currentTotal * 3, "3を積算" history))) initialState Run ((fun () - StatefulFunc(fun initialState - (), initialState)) result) updatedState ) ) 再び悪夢のようになってきましたが、またCombileの展開が残っています。 member this.Combine( partOne StatefulFunc state, unit , partTwo StatefulFunc state, a ) = StatefulFunc(fun initialState - let (), updatedState = Run partOne initialState Run partTwo updatedState ) ほとんどBindと同じですね。二つ目の引数が関数でなくそのままStatefulFuncになっているぐらいです。 let calculatorActions = StatefulFunc(fun initialState - let (), updatedState = Run ( StatefulFunc(fun initialState - let state = ref initialState for e in seq{1..5} do let (), updatedState = Run ( (fun i - StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun (currentTotal, history) - (), (currentTotal + i, (sprintf "%dを加算" i) history))) initialState Run ((fun () - StatefulFunc(fun initialState - (), initialState)) result) updatedState ) ) e) (!state) state = updatedState (), !state ) ) initialState Run ( StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun (currentTotal, history) - (), (currentTotal * 3, "3を積算" history))) initialState Run ((fun () - StatefulFunc(fun initialState - (), initialState)) result) updatedState ) ) updatedState ) なんだかマトリックスというか攻殻機動隊のオープニングを見ているような空気になってきました。もうこうなるとコードを見て合っているかどうか判定するのは不可能に近いですが、実際に実行してみて結果が変わらないことだけを心の支えに、これから簡約の作業に入っていきます。ここから下り坂です。そう思うと上のコードもどこか富士山のようなピラミッドのような感じにも見えてきます・・・・かね。 β-簡約!α-変換!β-簡約! もうどこから手をつけていいかわからないぐらいですが、内側から、前からの原則を考えながらRun適用(β-簡約)⇒α-変換⇒β-簡約を繰り返します。もういちいち流れを書いていられないので、一渡り作業するごとにソースの移り変わりを見ていただきます。 let calculatorActions = StatefulFunc(fun initialState - let (), updatedState = Run ( StatefulFunc(fun initialState - let state = ref initialState for e in seq{1..5} do let (), updatedState = Run ( (fun i - StatefulFunc(fun (currentTotal, history) - (), (currentTotal + i, (sprintf "%dを加算" i) history) ) ) e) (!state) state = updatedState (), !state ) ) initialState Run ( StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun (currentTotal, history) - (), (currentTotal * 3, "3を積算" history))) initialState Run ((fun () - StatefulFunc(fun initialState - (), initialState)) result) updatedState ) ) updatedState ) forの中を一通り簡約してみました。ここから、iにeを設定してその外のRunを解いていきます。 let calculatorActions = StatefulFunc(fun initialState - let (), updatedState = Run ( StatefulFunc(fun initialState - let state = ref initialState for e in seq{1..5} do let (), updatedState = (fun (currentTotal, history) - (), (currentTotal + e, (sprintf "%dを加算" e) history)) (!state) state = updatedState (), !state ) ) initialState Run ( StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun (currentTotal, history) - (), (currentTotal * 3, "3を積算" history))) initialState Run ((fun () - StatefulFunc(fun initialState - (), initialState)) result) updatedState ) ) updatedState ) さて、これからどうしましょうか。とりあえずfunの引数に何が入っても、戻り値のタプルの最初は()になりますからこれは取っても差し支えないでしょう。 また(currentTotal, history)のα-変換の相手が参照型で、そのままではうまくいかないため、一度letで束縛するように変えてみます。 let calculatorActions = StatefulFunc(fun initialState - let (), updatedState = Run ( StatefulFunc(fun initialState - let state = ref initialState for e in seq{1..5} do let (currentTotal, history) = !state state = (currentTotal + e, (sprintf "%dを加算" e) history) (), !state ) ) initialState Run ( StatefulFunc(fun initialState - let result, updatedState = Run (StatefulFunc(fun (currentTotal, history) - (), (currentTotal * 3, "3を積算" history))) initialState Run ((fun () - StatefulFunc(fun initialState - (), initialState)) result) updatedState ) ) updatedState ) だいぶすっきりしましたが、forの中身はもうこれ以上どうもならなそうです。後半に着手しましょう。もう怖いものなくなってきました。 let calculatorActions = StatefulFunc(fun initialState - let (), updatedState = Run ( StatefulFunc(fun initialState - let state = ref initialState for e in seq{1..5} do let (currentTotal, history) = !state state = (currentTotal + e, (sprintf "%dを加算" e) history) (), !state ) ) initialState (fun (currentTotal, history) - (), (currentTotal * 3, "3を積算" history)) updatedState ) forの外側を覆っているRunを取り除きましょう。その他、無駄な()の受け渡しを取ったり、色々やって出てきたのが下の式です。 let calculatorActions = StatefulFunc(fun initialState - let (currentTotal, history) = let state = ref initialState for e in seq{1..5} do let (currentTotal, history) = !state state = (currentTotal + e, (sprintf "%dを加算" e) history) !state (), (currentTotal * 3, "3を積算" history) ) ここから先にさらに何かやるとしたら、3行目のletを!stateの左に持ってきて、 let calculatorActions = StatefulFunc(fun initialState - let state = ref initialState for e in seq{1..5} do let (currentTotal, history) = !state state = (currentTotal + e, (sprintf "%dを加算" e) history) let (currentTotal, history) = !state (), (currentTotal * 3, "3を積算" history) ) としても結果は変わらないと思うのですが、この二つが等価な式であると言い切る自信が僕にはいまひとつありません。下のほうが字下げがひとつ減って分かりやすくなっていると思うのですがどんなもんでしょうか。 実行結果も展開前と変わらず、作業は成功しているようです。 できた式を見てみると このドタバタの結果できた式を見ると、結構当たり前のことをしているだけのように思えます。状態をリファレンスに閉じ込めて可変な値とし、ループ中に状態を失わないようになっているところが憎いですね。 しかしあの富士山が結果的にほとんど無駄のないコードになってしまったのはなかなかドラマチックな気さえします。これを読んでいる方は、ぜひぜひ、ただこれを読んでいるだけでなく、自分の手を動かしてこのワークフロー展開を体験してみてください。ワークフローに対する理解が劇的に深まるだけでなく、「ラムダ式どんとこい」的な基礎体力増強も期待できます。 ちなみに筆者は、「プログラミング言語の基礎概念(サイエンス社)」というテキストのオンライン練習問題をやることで、こういう巨大式に対する耐性を身に付けた気がします。時間がある人は決して損をさせませんからこちらにも挑戦してください。というようなアフェリエイトな流れになりつつも、そのへんよく分からないのでただ紹介するだけだったり。 (文責:片山 功士 2011/12/29) 今日: - 人 昨日: - 人 トータル: - 人