2022/10/28
話題1 Cametanさん
おおっ!ありがとうございます、こんなに簡単な書き方で良かったとは。Provideで検索したんですけどModule...って書き方だったんで不思議ではあったんですよねぇ・・これでバッチリです!
ほおお・・興味深いですねぇ・・Lisp的な文法で書かれているなら結構読めるかも
ということでちょっとだけ覗き見しました。ただデータだけ見てても動きがイメージできないので、ちょっと今度Emacsでプレイしてから読んでみたいと思います(^o^)
話題2 初めて夢に出た
学習してることが夢に出てくる・・ってのは良い意味でハマってる基準の一つだと思うんですけど(昔英語にハマってる頃、夢の中でタランティーノが出てきてベラベラと英語でやり取りをするという夢を見て感動した)・・
ついにプログラミングが夢に出てきました。
夢の中で大学の講義を受けてるんですけど、どうやらその講義(数学っぽい)の初回、先生がガイダンスをしてるんですが資料に例のマークが
やった!ちゃんとした授業でRacketの使い方を勉強できるやん!
ま、夢オチだったんですけどね
話題3 宿直夜のScratch開始
先日、実験的にChromeBookを持ち込んでScratchをやってみようかと言ってたんですけど・・続けてみることにしました。
コンセプトは「適当」です。SchemeとRacketはなんだかんだ基本的なところからやってたんで、今度はいきなり「まず作りたいものを作り始めて困ったら調べる」スタイルでやってみようかと。
ターゲットは・・まずは「反射衛星砲ゲーム」で。
2022/10/27 プログラミングの基礎の続き
昨夜は宿直でRacket、帰宅して飯食ってすぐさまプログラミングの基礎の続き・・・とプログラミング学習ばっかりやってます。結局、間があくとどんどん忘れていくので連続的にハマる時間が必要なんだろうな、と。
match-lambda*を使ったtree_mapを。これ、バッククォート記法間違ってるんですが数字は倍になってるのでこの時点で気づけてません。
リスクとを複数取るってのは(ドキュメントでは全然分からなかったけど)この場合は、f と ('Empty)がそれぞれ引数のリストって事になるんだろうな?と
この説明ホント分かりにくい(と思う)。両方共(lambda expr (match expr clause ...))で一緒だし(-_-;)
身につけるためにmoduleを使って例題を書いたり、exportの実験をしたり
treeの節と葉がいくつあるかを調べる関数。お手本を見ずに書けたぜ!とか思ってたら動かず
あ、そうか。レコード型でデータを渡さないといけないんだった・・と。オッケイ!
どんどん行こう。木の最大深度を調べるtree_depth。まずは自分で考えてみる。場合分けして大きな方が深い方だからそれを再帰してカウントすれば・・間違い!これ、この時点ではNodeの)の数が間違ってて動かないの気づかずにアルゴリズム的に間違ってると思ってます
お手本を参考にベタ移植。それでもエラー・・と、ここで)の件に気づいて修正して動く。あれ?ってことは最初の自作版でも行けたのでは?
Emptyはそもそも0なので省いて、Leaf nの返り値を1にしてたけど0に修正して(結局、節の最多ルートですもんね)・・オッケイ!あれ?って事は条件分けしないでもMax(あるか分からなかったのでMaxTを作った)で行けるのでは?
行けた!ってコレ、結局お手本の形じゃないかw
続いて木内に目的とする値があるかをチェックするsearch。不思議なことにお手本を見ずに書けるようになっている!
ここで一旦終了。上手く出来たところで終わるようにするのがストレス無く勉強するコツかもな、と。
しかし夜、食事をして映画を見ながらなんとなくやる気になって続ける。データを入れたらルールに即した場所に挿入する関数?これは難しそうだ・・と思ってお手本を見る。そして書いてみてようやく気づく「バッククォート記法間違ってるやんけ」と(出力でClass Emptyとか型の出力になってなかった)。
映画を見ながらダラダラと試行錯誤してようやくカンマの場所を特定する。
で、全体に適用。ここから遡ってそれまでに間違って書いてた部分も修正したりして過ごす。
ここで冒頭の間違ってるtree_mapの書き方もようやく修正できたのでした。まだやる気があったけど座りすぎてケツが限界なので今日は終了。多相型は必要ないし、いよいよ次でメトロ探索プログラムの改良か・・・
2022/10/25 Paiza ioでのモジュール化関連
CametanさんのアドバイスでRacketとGauche(と言うかPaiza)でのモジュール化のお話があった。最初見たときには「なんか面倒くさそうだなw」という印象で深入りする気は無かったのだが(読んだ時気力=MPが減少していたというのもあった)、モジュール化を使ったお手本を拝見してるうちに気が変わりまして
まず、Paiza ioのこの上のタブ。これが謎だったのがようやく解けました。以前、タブごとに別々のコードを書いて実行できると思ってやってみたらメインの部分しか結果が出ないので不思議に思ってたんですけどメインで呼び出すためのモジュールとして使うエリアだったのか!
モジュール化も呼び出しもテストも全く分からない状態だったんだけど、丸写しをしてみると「何をやってるか」くらいは分かるようになった(気がする)。
例のExportの設定がこれか〜。ここで型とか
メソッドで比較のユーザー定義なんかをしたのをモジュール化しておいて
こっちで使うと。で、ここ自体をメインで呼び出す・・なるほど!自分で打ってみてようやく流れが分かった(^o^)
で、確かに一つの関数ごとの管理がめちゃくちゃやりやすくなりそうだな!ってのが、これまたやってみて初めて実感できた。Racketの方もテストするのに毎回書きかけのところをコメントアウトして、そこそこの長さになってきたコードをずーっと遡って引数の流れをチェックして・・ってのが大変になってきていたので(テキストエディタにコピペして検索で調べていた)。これならタブで管理が(ちゃんとやれば)楽になりそう!
やっぱり先輩のアドバイスは素直に聞いておくべきだな!と思いました。
次回はmatch-lambda*版のtree_mapを勉強させてもらいます(^o^)
2022/10/22 プログラミングの基礎の続き
Cametanさんからヒントをいただき早速レコード型で作ってみる。おおっ!そういうことか〜
Node型も無事に機能した。なるほどねぇ・・あと、なんとなくだけど関数内で複数の再帰が動くイメージがつかめた気がする。前にクイックソートで書いた時には縦に連鎖してくコードだったからか、並行して再帰が起きるイメージがしにくかったのかも知れない。上の例題で横につながるツリー型複数の再帰を書いた時にカチッとはまった気がしたなぁ
そして無事にtree_mapも書けた。なるほどなぁ・・場合分けを管理するのに便利なので使ってただけなんですね。余計な記述を不要でコードの構造と流れに集中できる、なるほど1年前にLISP勧めてくださった理由にはこういうのもあったんですねぇ・・m(_ _)m
なるほど了解しました!何か新しいのに手を出すのは得意技なんでw それこそCのプログラムをRacketとかで再現してみるとか色々やってみようと思います(^o^)
2022/10/21
話題1 プログラミングの基礎の続き
おっ!
おおっ!?ちゃんと動いている・・なんか感動した。なるほどねぇ・・match-lambda・・色々と可能性を感じる。是非活用していこう
で、ようやく演習問題。各要素を2倍するだけだけど。なるほどなるほど
ところが・・・
各要素に関数を適用するコイツで足踏みとなる
match-lambdaを高階関数的に使うにはどうしたら良いのかが分からない・・もしかして適当に前につけたら? ま、駄目ですよねぇ
結局内部に書くしか無いのか・・これなら動くけど使い回せないじゃないか・・。fで済ましている他のところもLambdaを書かないといけないので長くなるし。ただ、考えようによってはパターンごとに自由に関数を設定できるというメリットはあるか・・
話題2 火・金宿直はScratchの日とするか?
WEB版のScratchであればバッテリーの生きてるChromeBookで楽しめるので、2系統の宿直のうち火曜日金曜日の家から近いけどWIFIの無い宿直の日にはコレでプログラミング学習をするのはどうだろう?と実験。
Mineoの激遅(けど激安)回線では最初の素材チョイス画面の読み込みが大変かな。インストール版の入ってるPCを持ち込む手もあるけど、そっちはバッテリーが無いしなぁ(コンセントには苦労しないので良いんだけど・・それだったらRacketいじれるし)。
とりあえずチュートリアル1をやってみた感じ、表示するオブジェクトごとに1フレームあたりの動作を設定して、メイン関数で並行して動かすって感じかな。確かに簡単に動きのあるゲームが作れそうな気がする。
しばらくは火曜日金曜日の宿直でやってみますか・・・
2022/10/20
話題1 Cametanさん
手ぇ抜いたトコロおもっくそバレてるーw! や、僕も気にはなってたんです。けどなんか(mapの前にConsするって思いつかなくて(今から考えると不思議だ!)
「ま、まぁアイテムの選択肢とは別と言えなくもないし・・」
と放置してたんですよね!次回、直します(^o^)
あ!そうなんですね!alist-cons alist-deleteってなんか破壊的変更なんだろうなと思ってました。なるほど新しい alistを返してくれるんだったら大丈夫・・と、思ったんですが並びが変わるのはなぁ・・・とも。
というのは、使い勝手的に一番先頭に「銀貨」が来て欲しいんですよね・・いや!更にココで思い直しました。buy-itemでもuse-item(次回実装予定)でも最後に銀貨をalist-consする形で書けば先頭に銀貨来ますよね(use-itemのときには引数を0にする)。
しかも!直近買ったものや使用したアイテムが必ず先頭から2つ目に来るってのはイカした仕様に思える。次回使わせていただきます(^o^)
話題2 テストのテスト
教えていただいたテストの動作をチェックしてみる。あ、Displayはいらんのか・・
ほほう・・なるほど〜。ちょっとこまめにやってみようかな。
2022/10/19
話題1 プログラミングの基礎の続き
二分木探索のためにバリアント型うんぬん、というところ。うーんw なんか他の言語では存在しないみたいなんだけど、要するにn択の選択をさせてMatchで分けて処理をさせるという事かな・・レコード型では再現できない気がするし、条件で言うとmatch-lambdaっぽいかな
match-lambdaだとこうなるかなぁ・・何でも出来るって言っても例えばrecord-typeみたいな「型」をバリアント型の仕様に沿って作るとか?どういう風に二分木に使うかによるか。まあ、手持ちで行けるところまで行きましょうか
一応作ったということでw
話題2 Racketでゲームらしきものを製作中
結局「出来ることしかやらない」から非常にお気楽に楽しく進められてます。10000時間の法則なんてのも「ちょっと背伸びした訓練を」って前提がつくという話なので、結局は脳みそ絞る必要があるわけですよね。でも、気分転換もプログラミングなんて・・素敵やん!
気分転換プログラミングと言えば「いつか甥っ子に仕込みたい」と狙っているScratch。
Linux版がこれ。バージョンも未だに1.x台らしいんだけど、それよりもこのフォントの汚さはなんなの(^_^;) これはやる気が奪われる
Win版とWeb版はこんな感じで美しくて思わず試してみたくなりますねぇ。PC6001で思い出に残ってる「万引少年ゲーム」「反射衛星砲ゲーム」なんかはコレで作ってみたいと思ってるんですよねぇ
話題3 Cametanさん
ドヘーッ!!またお手間を取らせてしまった・・しかも内容が今の僕には高度すぎてすぐには活用出来ないかな(^_^;) ブックマークしておいてじっくり試してみます。分解して飛ばさず学習したらいつかは使えるようになるとは思います!
しかし普段使いの環境でもないのにすいません。メトロ探索、復習としての(出来る限り)ノーヒント作り直しはRacketでやるつもりです。実は8月からスマホの契約変えたので自宅で給電しながらRacket使えるんですよね・・
ええっ!?これ不思議ですね・・transparentってただ値を見えるようにしてくれてるだけだと思ってたのに・・
これなんて特に高度過ぎて・・とにかくGaucheでは構造体の比較は鬼門だってのを教えてもらっただけでも謎の落とし穴にハマる危険が減ってるんで大助かりです
これ!これですね、先月たまたまその子のお母さんと会話になりまして話題がプログラミングに及んだので
「いや〜絶対ウケると思うんですよ〜。リスプってのをやってるって言っておいてもらえます?」
とお願いしたんですけどリアクションは無いですねぇ。ちなみにその子はC#メインだったそうですけど今度Pythonもやろうとしてるらしいです(そういう話をお母さんにもするんですね)。機会があったらちゃんとリスト内包表記使ってるかチェックしたろうと思いますw
ついに僕もgitを使うときが来たか・・と思いました。けどCametanさんの予想通りGit-hubの事だと思ってましたけど。現状、僕のバージョン管理はテキストエディタにコピペとCtrl+z連打ですからね・・w
2022/10/17
話題1 二分木の記事を拝見する
プログラミングの基礎で使う必要がありそうなのと、Racketゲームのページデータ(200ページくらいある)にも関わってきそうなのでCametanさんのページで二分木関連を検索して拝見する。うーん13番で!
今Racketで作ってるゲームらしきものだけど、なんか二分木探索のイメージが浮かばなかった。ページ構造体のリストで管理するするつもりなんだけど、目的のページ番号とかが明らかなので「配列」っぽいイメージをしてたと判明した。もしも構造体の要素にページデータを持たせて移動ページそを探そうと思ったら、やっぱり二分木探索を取り入れないといけないか・・
コンストラクタの話が出ていたのでリンク先の連想リスト関係を見る。うーん、ある要素を一つ入れ替えて新しい連想リストとして返すという関数は無い模様。予定通り自作するか・・。しかし破壊的変更をしないとすれば、常に環境変数に*equip*を持ちあるかないといけない(ショップでもバトルでもマスターでも使うので)ということだよな。各種構造体の要素を変更しなければ・・
話題2 Cametanさんから
うおお!むちゃくちゃ夢のある内容ですね!いや、前にも読んだことあると思うんですけど、多少なりとも自作でコード書くのを意識し始めてるとグッ!と来るものありますね〜
うおお!(今回こればっかり)なるほど〜! ツール作成って言うと、なんかハードル高かったんですけどそうやって考えれば良いのか。そして多分すごく勉強になりますよね
いや、そうなんですよ!入力を促す部分って絶対にあった方が良いですよねぇ!しかもこんなに短いコードで書けるのか・・。今回特に大事な考え方を教わったと思いました m(_ _)m
話題3 ビックリ
ええっ!?
2022/10/16
話題1 MX LinuxのGrubが壊れた
バイト先で使ってるMX Linuxを入れたPC(もともと再利用のための依頼があったので復活させたけど誰も使わないので僕の専用マシンになってしまっている)。先日、170件くらいアップデートがあったので一気に行いました。恐らくその時のGrub関係の作業が原因と思われるのですが起動しなくなってなってしまいました。ネットを見ても日本語ではあんまり記事もないので諦めようかと思ったのですが・・代わりに使っていたAntix19のメンテナンスメニューの中に起動の修正というものがありまして、いくつか試していたら奇跡的に回復できました!自分のためにもメモを・・
メニューから「コントロールセンター」→メンテナンス→Grubの再インストール。狙いは(今回は)PCのHDDに入っているMX21。ターゲットは2つ、ヘッダ部分?は「MBR」を指定しました。ネットをつなぐ必要もないし、そのまま再起動で立ち上がりました。助かった〜(と言ってもRacketでの作業が終わってベッドに入ったところで思いついて実行したので助かるのは次回からですが)。
話題2 やっぱりAntixがほぼ最強と言えないこともない
バイト先で使っているポンコツと言うか・・ゾンビPCなんですが、SSDへの感想が不可能なのでHDDで使ってます。で、この起動が遅いの。実際に動かせるようになるまで90秒くらいかかるかな・・・。一方でUSBにインストールしてるAntix19だと30秒ほどで操作が可能になるのです。そこでふと思ったんです。
「もしかしてMX21もUSBにインストールした方がHDDよりも軽快に動くのでは?」
と。今回ちょうどPC内部のMX21が使えなかったのでUSBにインストールしたものを使ってみたんですが・・もう、遅いのなんの!起動もHDDよりもより長くかかるしとても使えたものではありませんでした。それを考えるとAntix19の速さは「異常」と思えるレベル。これでタッチパッド無効の設定が可能ならなぁ・・惜しい。と言うか、まあ普通は別に無効にしなくても困らないけど。
今回の実験の結果、SSD>HDD>USBということが判明したので、もしもこのAntix19をSSDに入れたとしたら・・うーん、興奮する!今度もしもバイト先で使わないPCをいじる機会があったらAntix19にしよう!
話題2 グーグルの新サービス「translate HUB」を試した
PDFをそのまま渡して、レイアウトなどは変えずに翻訳できるという例のアレ。なんとか試すことが出来ました。これが大変だった・・・
・まずグーグルCloudにアカウントを作らないといけない
・なんか分からないけど権限の解放みたいなのをしないといけない
・そこで新たなプロジェクトみたいなのを作らないといけない
・そのプロジェクトにTransrate HUBを設定しないといけない
・1ファイル300ページまでしかアップロード出来ない
これらの苦労を乗り越えてアップロードしたんですけど
うーん、駄目だこりゃw プログラミング関係の書籍とは相性が最悪だな!ということがよく分かりました。
話題3 宿直Racket
Racketでのゲーム作り、一応ノロノロとではあるけど順調に進んでます。
問題は次回行うであろう装備品の更新部分。連想リストで管理してるんだけど、普通に考えると手軽に破壊的変更を行ってしまいそう。大域変数だから別に良いのかなぁ?と思ってたんだけど、折角なので連想リスト更新関数を作って非破壊的に更新する努力をしてみようか、と、今書きながら思いました
話題4 プログラミングの基礎
連想リストと言えばCametanさんの二分木部分の記事をザッと読み返しました。プログラミングの基礎の次の章が「2分木」なので助かる〜。ちょっと読んでるとOcamlではバリアント型という任意で要素を割り振れる型みたいなのがあるらしく、それを使って左右で分けるつもり(らしい)。この流れだともしかしたら自動二分木作成関数を作ることになるかも知れないなぁ。
2022/10/15
話題1 プログラミングの基礎の続き
メトロ検索プログラムの大詰め、ダイクストラメイン部分。実はこれ、昨日の時点で一応出来てたんですよね。ところが実行してみると・・タイムアウト。もしかして検索データが多いので時間がかかってハネられているのか?いや、書き方の問題かなぁ・・と。
しかしCametanさんに書いてもらったのも同様にタイムアウト。気になるのは先の章で検索効率を高めるという部分(2分木探索)が用意されてるんですよね!もしかしてそれを取り入れたらちゃんと動くのかも知れない!?ちょっと楽しみにしておこう。
メイン部分は放置して、検索用のリストを作る関数。なるほど・・これでglobal-ekikan-listから始点を0に設定した初期化された検索用のリストを作るのか・・やっとこさ納得できた
終点のeki_t型をレコードを返す
で、最後にそれらをまとめると。起点、終点を出してそこから検索用駅リストを作り、終点のレコード(手前リストとか更新済み)を返す、と。なるほどねぇ・・各関数の返り値を次々Letして、それを引数にまた関数→letのカスケード?構造。これは見やすい・・・。
ところでここでもタイムアウトという結果。ちょっと2分木まで結果はお預けということで!
話題2
Cametanさんに見つけてもらってお世話になり始めたのって去年の10月くらいだった気がする・・とプログラミングタグで調べて見ました。
「こんにちはPython」を読んでプログラミング学習を再開しようという気になったんですよね。そこでリアクションをしてもらって「誰だろう?」とページを見に行ったんですよね。そう考えるとgooブログとリアクションアイコンシステムのお陰だなぁ(今は受け付けないようにしてるけど)
そして「りりかるLISP」を紹介されて()の世界へ入ったのでした(^o^)
いや〜今から考えるとマジで(今より遥かに)何も分かってなかったなw 途中どうしても分からなくてカンニングしたけど、なんでそこまで行けたのか謎。なんで動いてるんだ?と思ってました(^_^;)
ちょうど1年ほど前の話なんですけど・・Cametanさん、本当にお世話かけちゃいまして・・ありがとうございます m(_ _)m
こんなんとてもじゃないけど独学は無理でしたわ〜
軽く振り返ってみると決定的に「そうか!!」と感じた時は2回。
・再帰の書き方が分かった時
・石取りゲームで「環境変数w」が分かった時
でしたかねぇ。
引数の少なくとも1つを終了条件をいずれ満たすように変化させた状態で定義の形をそのまま書けばいい・・これが分かった時、ようやく「あ、そういうこと!」と暗闇から抜け出した感じでしたねぇ。末尾再帰も末尾って最後の行の最後の引数が(cdr lst)になってることだとずっと思ってたからねw
そして謎の変数「w」。この環境変数の使い方が分かって「あ、これで(コードのエレガントさを無視すれば)なんとか動くプログラムが書ける」と思えましたかねぇ。
以上、約1年の振り返りでした
2022/10/14
話題1 Cametanさん
Racketで作ってるゲームのアイテム管理について。おおっ!なるほど・・全く考えたことが無かった。ゲームしてたときには「どんだけ持ってんねん」としか感じてなかったですねぇ。作ってみる段になって「いかに手を抜くか」と考えたら・・FF方式は確かに(作るのは)楽ですね(ユーザーがアイテムを探すのが大変)。
アイテムにそれぞれデータを持たせて一括管理だとフィールド数が多くなるかな?
(struct item (名前、値段、イメージ、属性(魔法と共通の効果属性、使用可能シーンなどを組み合わせでシンボル化)、ポイント(TRPGで言うとD6とか固定なら整数か)、1パック内の個数、トータル所持数))
これで行けるか・・思ってたより少ないかな。売ってるショップはショップ側でデータを持たせて店ごとの値段の違いは値段倍率を設定しておくとかかな?属性に物価変動ありなしの組み合わせもつけるとかしないとイカンけど。
ドラクエ方式だと一括管理はダブリがあるから一括は大変そうかな・・。
今度のラピュタの時には一度やってみよう!
はぁ〜・・何でもあるんですねぇ!ありがとうございます(^o^)
確かにデータ処理が強力な言語なら、最後は出力のバラエティって事になりますもんね(例のC言語の話にもからんで来ますけど)。Schemeにもあるってことはそんだけ需要があるってことでしょうし是非使ってみます!
www
なるほど〜・・ 今回書いていただいたマクロ、短くて効果も明白なのでいっちょ初マクロ学習として追わせてもらいます!
話題2
Discoverをダラリと眺めてたら(最近クラウドゲームのサービスを突然死させた)グーグルが新たなサービスを展開しているという。グーグルクラウドのサービスの1つでPDFを送ると、レイアウトなどは崩さずに言語のみAI翻訳して出力してくれるという「Transration HUB」。これを使えば・・翻訳されてないけど有益なプログラミング学習テキストが読みやすい形で我が手に!入るかも知れない(精度が謎なので)。
試してみようと思って登録。どうやら1ページあたり0.15$かかる従量制らしい・・。うーん・・けど初回無料分が300$分ついてくるので1800ページくらい使えるので実験してみるか!ちなみにスマホからでは権限の解放とやらが出来ず、古いお出かけ用Chromebook(いつもプログラミングで使ってるヤツ)ではブラウザが古くて使用できませんでした。次の宿直でやるか〜