2023/07/27 Fear of Macrosの続き
![](https://blogimg.goo.ne.jp/user_image/57/9b/91550b603a8f8388b0fa92e2ab189661.png)
Syntaxの記述がなんか納得できなかったので実験。あ、””で囲めば()はいらんのか・・
![](https://blogimg.goo.ne.jp/user_image/72/09/d9f3d6a97343f5ba11bc5e23c53a879d.png)
例文を見てテンプレート部分をRaketで打ち込んで見る。ふーん・・ドキュメントでSyntax->で検索してみたけどテンプレート以外に使い道ないっぽいかなぁ・・
![](https://blogimg.goo.ne.jp/user_image/65/68/ef6892dd4b45f0834b26d06cccd36b19.png)
ふーん・・なるほど。((_ の部分はパターンマッチなんだな(今更)。なるほどなるほど・・
と、ここで「パターン変数」って言葉が気になったので検索。したところ、なんか見たようなページが。えっ?これはFear of Macrosの日本語版?なんか機械翻訳っぽいけど有志が作ってくれてるみたい。
![](https://blogimg.goo.ne.jp/user_image/66/d2/8ed68ff74e6616c1bce9bc432621f32c.png)
というわけで、折角なので復習を兼ねて頭から見直してみる。ふーむ・・結局syntax~ってのは内部を表すプロパティ情報の型みたいなもんなのか?
![](https://blogimg.goo.ne.jp/user_image/66/b0/c506ad91426d93393a5b7018a5db5949.png)
ふんふん・・
![](https://blogimg.goo.ne.jp/user_image/1c/6f/5776a4a998fcc61cfb3a317f8a2823f0.png)
ふーむ・・最終的にはSyntax-rulesを使うので必要ないのかな?Syntax-rulesのサンプルでは見たこと無いような。まあでも本来はこういう仕組みになっててどんどん便利になって来て根本のレベルでの動作を意識しないで済むようになって来てると。
![](https://blogimg.goo.ne.jp/user_image/66/86/02f80ab5cb453cf71c159f45b39f968f.png)
一段階便利になるとこうなると。
![](https://blogimg.goo.ne.jp/user_image/4f/97/08c3d0ee953f43f7ed27055cbe0a319b.png)
これはまだ動かないコードなんだけど・・えっ!#'a #'bの#'ってSyntaxだったのか・・なんかFormatの感覚的には普通のSymbolで良さそうな気がするんだけど。(後でsyntax->datumしないとは言え)もともとはこうやってSyntax
を使わないと呼び出せないものなのか?
![](https://blogimg.goo.ne.jp/user_image/3e/cf/71b29615bbc0e14cb8e8580f92a9b537.png)
んで、動く版。内側のSyntax-caseでローカルな?Syntaxを作るということらしい?うーん・・まずSTXをパターンマッチで分解して、それを利用して内部のSyntax-caseでシンボルをFormatを使って作って、それをNameとしてまるごとマッチさせて生成する・・と言うのは分かる気がするのだが
![](https://blogimg.goo.ne.jp/user_image/34/0f/1cdb691304b394b98bf1da911eadccdc.png)
この#'aって何なんだ・・
![](https://blogimg.goo.ne.jp/user_image/1f/7c/517d4061866ea3fa033a96086dad1b84.png)
無いと駄目だが・・・
![](https://blogimg.goo.ne.jp/user_image/11/0b/4cc29ad1f629b0d8a62e161f1169869a.png)
パターン変数であれば何でも通ってしまうbody0でも通るなんて
![](https://blogimg.goo.ne.jp/user_image/37/46/73172052b7cc468f838259c83ae1e840.png)
いくら考えても分からないのでGPTに聞いてみる。ほぉ・・コンテキスト?
![](https://blogimg.goo.ne.jp/user_image/03/72/9d63509d7815cc5a27754230f26bdf37.png)
うーん・・取り出された要素からスコープとかの情報を取り出してマクロに適用するための仕組みらしい・・のか?まあ、そういうものだと丸覚えしても良いんだけどねぇ
うーん、もう24時半なので寝る~。明日の田和龍虎が解決してくれるだろうきっと
2023/07/23 Syntax-rulesあれこれ->fear of macros
![](https://blogimg.goo.ne.jp/user_image/34/7f/19b5ca0589adcfeee2094185ca7b1c50.png)
どうも田和龍虎です!昨日はCametanさんの「Syntax-rulesあれこれ」の記事を読ませていただいて、「Syntax-caseは難しい」というところが気になって検索したら面白いページを発見しました。Racketのオンラインドュメントと同じページ構成のサイトなので公式の一部なんだろうか?
![](https://blogimg.goo.ne.jp/user_image/51/76/bff9843a3f011cb7fef617c8874f04de.png)
どうやらRacketでSyntax-rules系の事を基本から(英語で)解説してくれてるようなので、この際挑戦しよう!と。いきなり興味深い部分にブチ当たりました。ぬっ!?これは・・・なんか面白いことが出来そうな機能ではないでしょうか?プログラム中に(read-line)で読み込んで直接式として評価させることが出来るとか?
![](https://blogimg.goo.ne.jp/user_image/2e/9b/074669300ba867641ed31cfba1f4feef.png)
![](https://blogimg.goo.ne.jp/user_image/6a/e0/797e4f92806c3eb0652baed78b74885f.png)
ifがマクロじゃないと駄目ってのもこの例がわかりやすかった
![](https://blogimg.goo.ne.jp/user_image/16/23/b5221ec6067bf2629c1e60ce28bffccb.png)
パターンマッチングに持っていく流れとか(for-syntaxとやらを導入しないと動かないのですが)
![](https://blogimg.goo.ne.jp/user_image/19/3d/900a4060a55924c3309c1ed69ba4ed6f.png)
で、ここからようやくSyntax-case。同じことをもっと簡単に書けるでしょ?ということらしい(?)
![](https://blogimg.goo.ne.jp/user_image/41/38/b2fa8c25b09804eeca94fd6d44ab7720.png)
そしてもっと簡単に書けるのがdefine-syntax-ruleだ、と。あれ?でもdefine-syntax ... syntax-rules () ...とどう違うんだ?
![](https://blogimg.goo.ne.jp/user_image/14/30/7034609259b7ed3dbb81a9b1e7f6acf2.png)
ここでChat-GPT。なるほど!言われてみればsyntax-rulesって複数形になってるわ。はぁ〜なるほどねぇ!
という訳で明日も続けて読んでいこうと思います。
2023/07/19
どうも、田和龍虎です!本当は手書きで馴染むまで書きまくるのが良いんだろうけど、まあオイオイやっていきます。
話題その1 またしてもCametanさんにお世話になってしまった
例の拡張Caseマクロ。正直、あのまま自分で考えてても絶対に解決できなかった自信がある!あああありがとうございます!
![](https://blogimg.goo.ne.jp/user_image/41/c0/7f35d07fd7ac7f448d5493426d1651af.png)
例によって書いていただいたコードを日本語訳していくスタイルで・・。
とりあえずCondの定義から・・相当(自分なりに)考えて帰納的にちょっと理解できた気がする。e0の部分が(= 5 5)のような式って事か、と。すごく基本的なことなんですけど、このシンボルが式だってのが分かって無かったんで混乱してたんだな、と。
しかし偽の場合にelse節がないのにエラーにならんのか?というのが疑問。うーん、もしかして実際に展開されるまで評価されないってのと関連してるのか・・この場合、実行は可能で単純に#fが返ってくるだけって事かなぁ・・
で、節がいくつかある場合ってのも実はかなり考えてやっとこさ推理する。c1ってのは ...文法でいうと(e0 e1 e2 ...)まるごとの省略形って事か・・な。だとしたら挙動が理解できる。
![](https://blogimg.goo.ne.jp/user_image/1d/60/bc1287f11fd7e1afe7db138d4f41548a.png)
続いて通常のCaseパターン。これを翻訳してるうちにCondの推理が立てられていった感じでした。
![](https://blogimg.goo.ne.jp/user_image/3d/e5/44a26a602227a9dbce313612ebdf86d6.png)
なるほど・・<ってどうやって判定しようと思ってたんですけど確かにProcだ!
![](https://blogimg.goo.ne.jp/user_image/0e/32/d9c7a7a2546295687b2c6ebdb0a15c18.png)
で、拡張版Caseも翻訳する。そうか・・単発パターンの場合、該当なしだったら何も無いんだから別に良いのか・・・なるほどなるほど・・
いや、勉強になりました!なんか今回こそはようやくちょっと掴めてきた気がする。
この状態で明日はCametanさんの「syntax-rulesあれこれ」の記事をもう一度見直してみようと思います!
話題その2 Udemyのセールで物は試しと買ってみた
![](https://blogimg.goo.ne.jp/user_image/03/2f/a5a04028862a69ec6bf37d2b1a25c643.png)
なんか滅多矢鱈と評判が良い(らしい)Udemyの講座。WEBアプリを作るのに最低限必要な事柄が学べるという謳い文句で、セールで
90%オフΣ(´∀`;)
の2200円くらいだったので・・買ってしまった。コレがロクなモンじゃなかったら今後Udemyは一切無視するからな、覚悟しろ!
うーん、やりたいことが多すぎる!
2023/07/16
どうも!田和龍虎です。今日もプログラミング学習やっていきます。改名したのでなじませるために毎回挨拶していくことにします!
話題その1 ラテン方陣のお題
Cametanさんのところでお題が出ていたので・・
![](https://blogimg.goo.ne.jp/user_image/79/f9/f2ba175dd1e0a0c868a00fd66f25ded9.jpg)
なるほど・・・出先でChromebookしかなかったのでPaizaでやると・・
![](https://blogimg.goo.ne.jp/user_image/15/d0/97e7f049b09847a43c5c23cef46b7815.png)
Read-lineで列の数を入力するようにしようと思ったんだけどなんか出来なかったので・・(^_^;)
あと、RacketだったらFold使うんですけど・・(と言い訳)。
明日これを日記で書いてから解答見ます〜
アッ!answerがanserになってるwこれは恥ずかしいw
話題その2 Caseの拡張(挫折編)
4人のキングを書いててたびたび
![](https://blogimg.goo.ne.jp/user_image/44/dc/9664f2f8f23d5612e1ff00ed8594d57a.png)
Caseでこういう、条件式を混ぜた書き方が出来たら楽なのに・・と思いまして、もしかしてSyntax-rulesを使ったら書けるのかも?と挑戦
![](https://blogimg.goo.ne.jp/user_image/3f/66/d83117986b8270a7b8509442dcdbdbfd.png)
正直、Syntax-rulesの事は例によってスッパリ脳から消え去ってるのでちょっとChat-GPTでたたき台を作ってもらう。珍しくちゃんと動く作例を出してくれました。
で・・とりあえず昨夜は駄目でした。うーん、(cond ... のところに(orを噛ましてPatternが複数の要素を持つ場合には条件式と判断して・・ってできそうな気がするんだけど・・もうちょっと粘ります。
2023/07/14 4人のキング、もう少しで下書きが終わる、か
コツコツとコードを書いててようやくCQ(クラブのクイーン)まで到着。
![](https://blogimg.goo.ne.jp/user_image/0e/e7/d8507798a8c9108dc7641c1cffa9e527.jpg)
と、思ったらなんだよこれ〜(^_^;) 仲間を入れてパーティを組めるというのは分かってたんでバトルシステム部分に頑張って入れたわけだけど、一回限りのカプセル怪獣的な傭兵システムが突然登場。当然のように使い捨てのシステムなので他に応用は出来ない(ついでに言うと今作ってる「四人のジャック」には仲パーティが組めるイベントは無い)。
![](https://blogimg.goo.ne.jp/user_image/1b/18/4c57c1666def1f77bfc9269fdaaf9883.png)
ちょっと考えた結果、傭兵は「アイテム」扱いにして持ってる場合には戦闘時に代理戦闘可能関数を呼び出して判定させるようにするか・・・と。
防具は常時装備形式にして、武器は戦闘ターンごとにどの武器を選ぶかを指定するゲームブックのラピュタに近い方式にすれば、装備の煩わしさと「研ぎ屋システム(なんてのもあるのだ)」の処理も楽になる。
とにかくイベントごとに独自の処理を求められるんで、ナウシカ・ラピュタのゲームブックと違って毎回考えるので・・ある意味楽しいかな。データ処理の連鎖とか「あ〜ハイハイ」って感じで抵抗は感じなくなってきましたねぇ。そういう意味で言うと、ナウシカ→ラピュタ→四人のキングってのは意図したわけではないけど上手い具合に段々と複雑性が上がってるので学習としては良かったなぁ〜と。
とりあえず今やってる(四人のキングって本の中の)「四人のジャック」が終わったら、他の言語で「四人のキング」「四人のクイーン」を書く挑戦をしてみると良い学習になりそうだな?出来るだけ思想が違ってる言語が良いはずだろうから候補はRUSTとPYTHONあたりかな?
2023/07/10
話題その1 CoA終了
![](https://blogimg.goo.ne.jp/user_image/10/8b/48f8ad8d50ab1c5c2d0357a6cfc72043.png)
カースオブアジュアボンド、やっとこさクリアした!これで多少はプログラミング学習に時間を割ける・・かなと思ったんですけど、まあ4部作だからなぁ・・。Secret of silver bladesとPool of Darknessまではプレイしないとケリをつけることにならないか・・
![](https://blogimg.goo.ne.jp/user_image/64/55/c83383222c3eb17c0b644afc37c713d5.png)
ところで・・ラスボス撃破後の流れなんですが、画面をキャプチャして後でゆっくり翻訳しながら読むといういつものつもりでいたら、本編ではEnterキーで行われるメッセージ送りがAnyキーになってたものだからキャプチャキーで送られてしまってキャプチャできてないじゃないか!Youtubeで攻略動画を探して確認するか・・
話題その2 四人のキング進捗
![](https://blogimg.goo.ne.jp/user_image/0a/05/f92d95899947e7ac7ffef0e9fea39f66.png)
ようやく四人のキング、ハートのキングまでの下書きが終わった。後はクローバーのキングまで作ったら実際にカードデータを作りながら清書とテストをやっていこう。しかし人間の柔軟さを前提に作られてるシステムなので、イベントごとに例外だらけで・・Fold-Evalシステムでやると決めたけど、どうしても対応できないのは一つのクロージャに様々な機能を詰め込むことになってしまって・・汚いコードになりそうだぁ。
2023/07/04 生存報告
![](https://blogimg.goo.ne.jp/user_image/18/6d/f551e4ae91a88f380e536c9c75672c12.png)
なんだかんだで忙しくてちょっと前みたいに腰を据えてとコーディングが出来ない・・・忙しいって言っても宿直先で「しっかり眠る」とかFODで「アニメを見る」とかなんですけど(^_^;)
4人のキングは現在クロージャ作成でハートの8。もうすぐハートが終わってクラブをやって一応終了。そこからはテストと、カード&アイテムデータの作成って感じですか。
ハートの8は呪いの館。お金を払って(マルチプレイの場合は)敵プレイヤーに呪いをかけることが出来るのだw
うーん・・ステータスはスロット一個にシンボルをリストで追加していって、Main-readで毎回読み込んでバッドステータスで条件ワケして・・と予定してるんだけど・・とにかくナウシカとかラピュタの時に比べてイベントが多彩なんで、ちゃんと覚えておいて後で対応した形に整えていけるのかが不安だな〜。こういうものこそ一気に作ってしまうべきなんでしょうね。
2023/06/29
話題その1 CametanさんのUNIX話
非常に興味深い話だった。実はコンピューターの歴史とか好きなんですよね!
![](https://blogimg.goo.ne.jp/user_image/36/a7/7033d20295e529876e6401880d040170.jpg)
いや〜・・ゲームをしたいという理由でOSを作るって・・プログラミングガチ勢は違いますね(^_^;)
ちなみに、僕のプログラミング学習の近況ですが・・相変わらずで4人のキングのイベント用クロージャをPaizaで下書きしてRacketで清書して・・というのを続けてます。宿直中はAD&DのCoAをやってるんでちょっとリズムがずれてしまってますけど。CoAは3つ目の入れ墨を消すことに成功しました。
![](https://blogimg.goo.ne.jp/user_image/1d/05/7f5a42c2d46ed4eed360de9b2d214c23.png)
こんな感じで既存の組み合わせで作れない部分をどんどん追加してってる感じ。
![](https://blogimg.goo.ne.jp/user_image/0c/ee/0a612b27849888fae9cdcaf2d985cc27.jpg)
Wordstar!聞いたことありますね!なんか海外ドラマ「Game of thrones」の脚本家が今でもDOS版のWordstarを使って脚本を執筆しているとか?いや、分かる分かる・・僕も昔NECのモバイルギアってのを使って毎日日記を書いてたんだけど(毎日大量に書くので手書きでは追っつかないのだ)、初代のいわゆる「DOSモバ」が昇天してしまった後にWindowsCE採用の次世代機を使ったら微妙なラグで気持ち悪くて仕方がなかった。DOSのPCなんてメモリ640KBとかでしたもんねぇ・・今や8GBが当たり前なんだからそりゃテキスト入力(しかも変換なし)だったらDOSで十分ですよねぇ
重い・軽いで言えば・・こないだ試した知り合いの関わったゲーム「ブライト・トレーサー」、あれ我が家の最強マシンでも全然話になりませんでした。もっと軽い環境でも遊べるものにした方が試しに遊んでもらえる率も俄然高くなると思うんですけどね。最近のゲーム、あんまりにもグラフィックに重きを置きすぎじゃないですかねぇ?最近のニュースでファミコンを始めとしたレトロゲームが人気で中古価格高騰ってのがありましたけど、そういう事なんじゃないですかね?グラボなんて120Wとか電力食ったりしますもんねぇ・・環境破壊待ったなし!その点ニンテンドーSwitchとかは初代ファミコンと同じ4Wとかなんですよね、エラい!
![](https://blogimg.goo.ne.jp/user_image/70/f3/b9fd5b22bd3aa6469d75e47be5fedb74.jpg)
(^^) そう言われてみれば本の表紙デザインも思わせぶりではありますねぇ!
![](https://blogimg.goo.ne.jp/user_image/27/78/067f0185fdabe0f3e6b71a87f7133c83.jpg)
なるほど!VAIOは分解の経験が無いですが、NECのノートやThinkpadは確かにパーツ交換のためのアクセスが非常に良かったですね!一方でパナソニックのレッツノートはほぼ全バラシにしないとCPUの交換がままならないということでジャンク界隈では嫌われてる模様。
2023/06/25
話題その1 SlimeとかRacket用コードブラウザ
![](https://blogimg.goo.ne.jp/user_image/5f/9b/d889ea205faddd86dca3899a875794fe.png)
例によってCametanさんから色々と教えていただきましたm(_ _)m
Racketの▼からそんな機能が呼び出せたとは・・Paiza-ioの時もそうでしたけど折角用意されてる機能を全然使えてないな、マニュアルを読まないクセを改めようと思いました。
とりあえずリンク先はザーッとチェックしてみます!ありがとうございます〜
この記事のコメント部分にたっぷり書いて頂いてるので興味有る方は是非どうぞ!
話題その2 プログラミング続けてます
![](https://blogimg.goo.ne.jp/user_image/41/a3/0d1320bf62fbdc0f35ae20d46e7ea2fe.png)
Paiza-ioで下書きをして、Radketにコピーして仕上げ・・というのをコツコツ続けています。
だが!FODのアニメと再生PCでのゲームで時間が減ってるのも事実。結局最後は時間の使い方か〜。
あ!
![](https://blogimg.goo.ne.jp/user_image/49/25/7070cfbc949d2166ba492d6d12d12ec7.jpg)
Cametanさんオススメの囲碁ゲーもスマホに入れました。雨宿り中にちょっとプレイ。囲碁ってこういうルールだったのかw ヒカルの碁は全巻読んだんですけどねぇ(アニメ見るまで佐為って女だと思ってた)。
話題その3 知り合いの作ったゲーム
何度か話題にした知り合いの女の子が昨年からゲーム制作会社に勤め始めてます。この5月についにプログラマーとして関わった新人グループが(恐らく研修の一環として)開発したゲームがSteamにて無料配信されてるというのをお聞きして早速チェック!
![](https://blogimg.goo.ne.jp/user_image/46/52/2f1f100b504490375d55037924b7ce77.jpg)
その名は「ブライトトレーサー」。サイバー&3D版初代マリオみたいな感じかな?まずド派手な画面に圧倒される!ふ(←ペンギン)とかの世界とは全く別次元だw
早速例のもらいものゲーミングパソコンにインストール!クリアして感想でも報告するか!と思ったのだが・・ドラクエベンチ3400程度のマシンではOPTION画面で画質を落とすのさえもクソムズい!一応チュートリアルを開始することは出来たのだけどとてもじゃないけどまともなプレイは不可能なのだった(-_-;)
Core-i73632QMマシンならばもうちょっとマシだろうか?試してみるかなぁ・・本当はSteamとか入れたくないのだけど。
もしよかったらご覧のみなさんもプレイしてどうぞ(^o^)
2023/06/21 Bing-Chat(ChatGPT4)にDrRacketについて訊いてみる
![](https://blogimg.goo.ne.jp/user_image/47/0e/e86f8835f0dbad9f9515d3743934ea97.png)
前に書いたけどRacketのIDE、DrRacketで1つのファイルを擬似的に別ブロックに分けて管理する事は出来ないのか?もしかして誰か作ってくれたりしてないか?と思ったので尋ねる。
うーん?なんかトンチンカンな事を言われてるような?特にScribbleについてはただのドキュメントエディタっぽいな。SLIMEはLisp関係で聞いたことがあるのでちょっと調べてみるかなぁ・・(確かCametanさんがEmacsでCommon-lispを使うのに紹介してくださってたような)。
![](https://blogimg.goo.ne.jp/user_image/0e/6b/b9279a65bb2770fb7a045bcea7a27814.png)
ちょっと食い下がってみる。DrRacket自体もRacketで書かれているということなので、もっと学習を進めれば自分でいじったり出来るようになるのだろうか?まあ、壮大な目標ではあるが。
![](https://blogimg.goo.ne.jp/user_image/2b/a9/410dc238c5a1f218716c6790387f1e1c.png)
上の質問に対してBing-Chatの返答。いや、そういうのを求めているわけでは・・と思ったんだけど、これ面白いな!なるほどマクロで入力時の書式を整えて関数かデータか(あるいは更に他の何か)を明確に区別するというアイデアを示してくれている。これは理解しやすくて効果も目に見えるマクロの使い方だな!
2023/06/19 4人のキング、前のスタイルに戻す
![](https://blogimg.goo.ne.jp/user_image/30/57/c0655df27a35a2899c7d5245022afb24.png)
考えた結果、今回はコード量を減らす方向で・・。全部クロージャを貫くパターンはいつか自分で何かを作る時に使えそうではあるので良い学習にはなったしヨシ!
あ、各クロージャの分岐は書式を統一するために、IFが真の場合には別クロージャを呼び出す、偽の場合にはスルーさせるとしました。気持ち良い!
![](https://blogimg.goo.ne.jp/user_image/72/3b/c7e57f33b68561a0b71a02ead53cbeec.png)
高速WIFI使い放題、自宅から徒歩2分の図書館のテラスにて、YoutubeでジャンクPC修理動画を流しつつPaiza.ioで細かいことを考えずにリラックスしてテキトーに「4人のキング」の関数やらデータを下書き。天国かな?
2023/06/18 4人のキングの全クロージャ貫きスタイル実験
![](https://blogimg.goo.ne.jp/user_image/75/a4/d56f1165c5e9c233bfa480e4cb8be9e1.png)
スペードのAで使うクロージャは全部でこんだけあります。これを全部貫通するように書いていくとどうなるか?
![](https://blogimg.goo.ne.jp/user_image/6f/e2/d1c01a8cd4c178771a8a4b83e4e8e1f4.png)
あ、ちなみに前までselectからの脱出で直接Main-readを呼び出してましたけどこれもクロージャにしまして・・
![](https://blogimg.goo.ne.jp/user_image/08/9c/711a952b3ef62b2f09872282054c601e.png)
前は引数をもたせる必要がなかったSelectですが、判定の結果が真なら引数の0番目、偽なら1番目を選ばせてWORLDインスタンスの使ってないスロットWORLD-WINに次に動かしたいクロージャを忍ばせるように変更
![](https://blogimg.goo.ne.jp/user_image/14/49/d8ad0184dfddbfb5c175d7ad084ef59d.png)
CARD-F-LISTの次のクロージャに送られるのですが、このときにクロージャ内でWORDL-WINに入ってるクロージャと現在のクロージャが一致すれば実行され、一致しないとスルーで次のクロージャに回される・・という仕組みで行けそうな気がした。
![](https://blogimg.goo.ne.jp/user_image/20/79/66d097829f737c2f0a4bba54714529d4.png)
WORLD-WINにクロージャを入れておいて、各クロージャには冒頭で自身のクロージャとWINを比べて一致していれば実行、していなければスルーさせるようにしておけば可能っぽい
![](https://blogimg.goo.ne.jp/user_image/3a/aa/2e956e2a1a101a34c2c87d5c25ef3174.png)
実際はこういう感じかな?うーん、テンプレとしてしまえば気にはならないかも知れない。あ~どうすっかな~・・まあ、こっちの方が一貫性があると言えばある・・気もする。
ただまあ、明らかにコードの量は増えるよなぁ。スタイルとしては面白そうな気がするんだが。
2023/06/12 どこでもプログラミング
昨夜はWIFI完備の宿直だったんだけど今週は週7宿直の上に清掃バイトに子守に呼ばれて全力で遊んで、お風呂清掃で張り切って天井のカビトリをやったら一気に眠気が!あ〜何も出来なかった。
という訳で本日、ちょっとでも進めようとC200MAを持ち込みました。こいつはChromebookなのでもちろんRacketを使えないのですが、モニタ問題さえ解決すればアレがあるじゃないですかアレ
![](https://blogimg.goo.ne.jp/user_image/5d/49/29cbfe190f7e85c83d9dbc25f1900feb.png)
そう、懐かしのPaiza.io!クラウド形式のエディタです。こいつはSchemeも使えるから好きだ。もちろんRacket文法は実行できないんだけど、対応()の表示に自動インデント、共通している関数は色も変わるし地味に画面上に入ってる単語についてはオートコンプリートもあるという充実ぶり。これなら下書きとして十分すぎるほど使えますね!Pomeraはやっぱり無理があった(-_-;) Pomera(初代)は文字コードもShift-jisだけだったし。
この調子でC200MAを使い倒してやるわい!
あ、ところでPaiza.ioがもっと便利になるワザを発見した!Paizaのエディタが気に入らなかった理由としてエディタ以外の部分の無駄な表示部分の存在があった。もっとエディタ部分を広く使わせてくれよ!と。
でもワタシ気づいちゃった・・ブラウザの表示を75%くらいに縮小して、エディタの設定でフォントサイズをデカくすれば良いじゃない・・ということに。上の画像は75%にしたものですが、かなり使いやすそうになってるでしょ?これで蘇ったC200MAの8時間バッテリーが真の力を発揮できるぜ!
2023/06/09 四人のキング、CARD構造体スロットが汚すぎる問題
![](https://blogimg.goo.ne.jp/user_image/09/02/92179b676bfdfe39e856b4cd6d50bfa4.png)
四人のキングは通常バトル部分が一応終わったので、次に懸念のメインREPLでのCARD構造体の処理を考えていかないといけない。暫定でこんな感じで作ってたけど・・自分で言うのもナンだけど吐き気がするほど意味不明だ。CARDで発生するイベントが「戦闘を受けるかどうか」「運試し」「戦闘」「降参あり戦闘」などなど不定数で順番も一定しない処理の連続で出来てるためだ。そのため、CARDインスタンスごとに各スロットの役割がマゼコゼになって行く確信がある。いや〜・・なんつーか、こう・・ブロック化された関数を好きな順番で組み合わせてもちゃんと動くシステムって出来ないのか?と。
![](https://blogimg.goo.ne.jp/user_image/0a/27/0907c3f9458c50cb340f4cba362f93d9.png)
例えばこれは戦闘を受けるかどうかの関数、Select-battleなんだけど・・こういうのを引数と返り値を標準化してパーツにして組み合わせて使えるようにしたい
![](https://blogimg.goo.ne.jp/user_image/7b/0e/eb60669ecbf513d59de16706bdfd1a05.png)
思いつかないので、とりあえず最低いくつスロットがあれば全部のパターンを網羅できるのかを考えたり・・うーん、違うな
![](https://blogimg.goo.ne.jp/user_image/7d/42/e077bdee0e324e4151fe5b97c8ceea7e.png)
要するにこういう感じでそれこそ関数型言語のREPLみたいにリレーしていければ・・ハッ!?
![](https://blogimg.goo.ne.jp/user_image/22/f9/2eee610050f05bd990a26c1f9b6c32f6.png)
そうか、FOLD!CametanさんにGUIの表示の時に教えてもらったアレだ!クロージャーをリストにしてスロットにセット、それぞれのクロージャが必要とするデータのリストのリストを別のスロットにセット、必ずWORLD構造体を初期値として受け取り、同じくWORLD構造体を返り値として返すようにすればCARDインスタンスのスロットは2つでいくらでも処理が出来るッ!
グヘヘ、むちゃくちゃ興奮してきたぜ・・
そのためにはやはりENEMYデータはWORLD構造体に収納できるように書き換えないといけないが、一気に展望が開けたぜ!
2023/06/08
話題その1 四人のキングバトル反省編
![](https://blogimg.goo.ne.jp/user_image/02/bf/d740213767be5b8c7e3d7c5b29afdaa0.png)
昨日、四人のキングの動作を振り返っていて気づいた。
しまった〜!WORLD構造体に通常’()のスロットをENEMIESを持たせておいて戦闘発生となった時点でCARDから読み込めば毎回別にENEMYを引数にして回す必要なかったじゃないか・・。考えたらナウシカのときにはすでにその方法でやってたのにしくじったなぁ・・。
ということで昨夜追加した状態で書き直そうかと途中までやったんですけど、結果「まあ、もう書き終わったし良いか」となりました。次から気をつけよう!
![](https://blogimg.goo.ne.jp/user_image/41/c5/ac632a025794340341125c2c47540d11.png)
CARDインスタンスをSetで破壊的に変更するが楽なんだけど・・それをやめるとなると・・カードと同じ数の真偽要素を持つリストをWORLD構造体に作り、CARD-FLIPを参照してPlayerが訪れたあとに#fにするかどうかを決めて変更後のリストを返す、とせねばなるまい。SHOPなどはプレイヤーが離れても何度でも利用可能なのでカードは取り除かれない、つまりCARD-FLIPは#fとなる。PLYAERが訪れたカードと同じIndex番目の真偽値リストが#fとなっている場合にはカードが取り除かれた状態なのでイベントが発生しないと。これもナウシカの時にすでにやってたような。出来るだけ毎回別の方法を使ってみたいと思ってたけど、結局同じ発想になってしまった(-_-;)
話題その2 Racketの亜種IDEがあったら良いな
Racketでデバッグしていて思ったけど、ソースをカテゴリに分けたファイル別(つまりタブ別)で管理するのが大変な気がする。テストするのにも複数のファイルとの依存関係があったりしてこんがらがるし、使用されてる関数ザッと検索する事も出来ないし。
・アウトラインエディタ的に縦長で一元的に管理できて左のカラムか検索で一発移動
・役割ごとに別段落として任意にブロック化
・ファイル上は1つのファイルに書かれている扱いで依存を気にする必要もなく
・定義はどこに書いてもちゃんと読み込まれるような・・
そんな感じにならんかなぁ?
2023/06/03 Apply2
![](https://blogimg.goo.ne.jp/user_image/54/fa/fb4ffe9474abce65b7e4bce36413fe4d.png)
カメタンさんにApplyについて興味深い話を書いていただいた。え!?なんだこのダヴィンチコードみたいな隠しメッセージは (・_・;)
非常にソソられる!早速GPTにApplyの興味深い使い方を聞いてみよう
![](https://blogimg.goo.ne.jp/user_image/03/e8/d705fb530fc3323d94ecf159702c7941.png)
あ、はい・・。普通だな!
![](https://blogimg.goo.ne.jp/user_image/4c/b2/b58faf119dd6591e8cf97d828fdba2a8.png)
うーん・・これも普通だな?
結局(apply map list '(..))のような驚きを得られるような例は出なかったな。でも、「ユーザーが作ることは出来ない」一方で「Evalと違ってバンバン使っていい」という対の関係が興味深いなぁ。使い方は分かったような気がするけど理屈に興味があるので引き続き探求を続けよう。
2023/06/02 Apply
![](https://blogimg.goo.ne.jp/user_image/02/de/5eebbb6b24ccb347b1baccb1a6f05203.png)
現在チョコチョコと四人のキングの戦闘部分を書いてて、複数vs複数の処理をやってます。戦闘結果はこのようなリストとして返ってくるのですが、これを元に敵味方のHPを増減させて新たなPLAYERとENEMYのインスタンスのリストを作らないといけない
![](https://blogimg.goo.ne.jp/user_image/1f/50/2f821694abdf69361ca7eabb0d45bc5b.png)
そこのところをdamage-apply関数としてBattle-evalに組み込むか・・とここまで作ってはたと気づいた!PlayerとEnemyって同じ関数内で回すこと能わずじゃない!?
つまり、battle-result-listtってPlayerを中心にしたリストなので普通にCdrで回したらEnemyは串刺し出来ないわけ(ということに書き始めてようやく気づいた)。まあ、Playerの同一性はリストと対応するけど、Enemyの場合は各リストのIndexに対応するわけですね(ということ書き始めてようやく気づいた)。
これをどうするか・・なんとか頭をひねって無理やりカウンタを設定してLoopとMapで作ったんだけど、どう考えてもスマートではない。こんな簡単そうなことなのにまたしても思い浮かばない。
一応、自力で結果だけは出るものがひねり出せたので・・・教えてくれChatGPT!
![](https://blogimg.goo.ne.jp/user_image/17/a2/8a27997e9eecc73a3e2f6fc78031b35a.png)
え?
![](https://blogimg.goo.ne.jp/user_image/2a/5d/40c0e144c5a2356c0a1cc281ee94e3ca.png)
なんスかこれ?全くワケが分からない。どうしても理解できないのでステップバイステップで説明してくれとお願いする
![](https://blogimg.goo.ne.jp/user_image/5c/8b/918c93f1491129593798f6c536964d1b.png)
![](https://blogimg.goo.ne.jp/user_image/5a/0e/de3da2cfdb846f9cf385dddd0c6e8b57.png)
ほうほう・・なんと!
![](https://blogimg.goo.ne.jp/user_image/22/7d/c321bc5ec51f7283c9728fc295d189a4.png)
特にココ!!カメタンさんがおっしゃってた()を外すってそういうことか!ついついList→Map→Applyと言う連鎖で考えてたけどMapに食わせる前に介入していたとは〜。なるほどこれだと非常によく分かる!思わず「バッチリ理解できました、ありがとう!」とChatGPTにお礼を書いてしまったくらい。なるほどねぇ〜。ちょっと次回はApplyのおもしろ活用法みたいなのを調べてみよう(自分では思いつかないので)。