星田オステオパシー

プログラミング日記 2022/03/13~

2022/04/02
 そろそろSpacemacsを使うときが来たな?という気になってきたので起動。

 うーん・・毎回エラーが出るんですよね・・一応起動するし動くんですけど、この「evil-unipaired」って部分。どうもローカルに本来はあるはずのファイルが無いっぽいが・・まあどうしても駄目ならまたインストールしなおすけど

 おほーっ!これこれ!カッコが虹色に(^o^) ところが、これが適用されるのはCommon-lispの時だけっぽい。SchemeやRacketだと色が変わらないんですよね・・
 あと、関数のauto-completion、自動入力補完が動いてないんですなぁ・・Common-lispでもSchemeでも。

 Layer configはこんな感じなんですが


 このエラー表示が気になるんですが・・ネットで同様のエラーメッセージを調べると、設定ファイルからorgなんとかを消してしまえとかなんとかw
flyspellはスペルチェッカーらしいので、この辞書ファイルが入ってないせいで出てるのか?もしかしてAuto-completionが動かないのもこれが入ってないからとか?とか思って色々と触ってると・・・


ありっ? configurationファイルの中では自動補完が効いてる!


 とりあえずこんだけ設定して、Lisp形式のファイルを開けて入力してみたんですけどやっぱりオートコンプリート効果出ず

 もしかしてEmacs-lisp形式の時だけ補完が効いてるのかも知れないと思って、設定ファイルをコメントアウトしてSPC f e R


 一度閉じてSPC f e dで設定ファイルを開いてコメントアウトしてあるのを確認して入力を・・したらやっぱり補完されてる。Emacs-lispは特別ということか・・

どうなってんだ~と調べてると
 あ・・Flyspellはやっぱりスペルチェック系か。面倒なのでコメントアウトで無効にしたけど。auto-completionでもWin特有の問題があるのかも知れない。
 ん~・・まあ、()の色分けだけでも写経の時の勉強には良いし、Common-lispの時にはSpacemacsを使うようにしてSchemeはRacketでやるか・・。そしていずれ今使ってるPCのうち一台にLinux系のOSを入れてしまう・・って事かな。GoogleのFlexがLinuxモードも入れてくれるんだったらそれに越したことが無いのだが・・リポジトリシステム、羨ましいです(^_^;)

2022/04/01
 RoRを引き続き・・関数の流れを理解するためにリストを行ったり来たり
 


 これはもう一回頭から見直さないといかんなぁ


 

2022/03/31
 Cametanさんからアドバイスをいただく。Trace!
 
 実は「Clisp入れるのはな~・・」とか思ってたんで大助かりです!


 使い方も簡単そうですし、ちょっと基礎をちゃんと固めるために色々とやってみます!ありがとうございます~

 ところでRoRもようやくPCを立った状態で出来るようになったのでRacketで続きの手打ちしています。

 こういう気になるところはコメントを残しておいて後で検証してみようとか。打ちながらでもどの関数がどこでどういう引数を入れて使われるのかとか、これ頭がこんがらがるな・・長い仮引数名って面倒だと思ってたけど、snとか短いのじゃなくて読んですぐに理解できるものにすべきですね(実用Common-Lispだとそうなってたような?)。

 関数の関係を調べるのに既に全部がまとまってるソースコードないんかい?と思って調べたらGitに(多分)詳しいコメント付きで上がってました。これでページ内検索を使えばどういう実引数で使われてるのか分かるな!

 ちなみに本家のページにはソースコードは無いんですが作るのがどういうゲムなのか凝った造りで見ることが出来ます。こういうの良いですね!

 後は・・リストの最後を消すって処理でいつものnull?で調べるんじゃなくてCDR LISTで空リストを返すようにするってのも地味におお・・って感じ。あと、Racetって[リストを入れてるとコッカの部分で)を連打しても対応してるところはちゃんと]に自動で入力されるんですね!それが出来るなら色を自動で変えるのもやってくれれば良いのにw


2022/03/29

 Spacemacsでも対応しているという構造編集は楽しみです!立ったままでプログラミング用のPCを使えるように配置しましたのでもう腰を気にせずに出来ますよ〜 明日から(^_^;)

 CametanさんのReduce解説を拝見する。なるほど、もしかしてReduce(減らす)って冗長な関数の適応を減らすからって理由でのネーミングなのか!
 あと、基本的な数学の知識がないので単位元が分からないw。

 ほーん・・掛け算だったら1、足し算引き算だったら0しかないって事かな?数字以外だと全部だめですよね。


 これと

 これも今後仕様を見て行くんだったら知っておかないと。しかしKonsってネーミング面白いですね

 で、問題はFoldの仕組みなんですけど


 うまく説明出来ないんだけど、Foldの使用上の仕組みとしては「そーゆーもんだ」と理解できるんですが、内部の仕組みとしての動きがスッキリしてなくて

 この場合は、左に再帰のMy-foldlがあるから、イメージとして
 (my-fodl 5  (my-fodl 4 (my-fodl 3 (my-fodl 2 (my-fodl (first lst) base...
  ←     ←    ←   ←    ←
 って感じで左に積み上がってゆくので結果Reverseになって


 こっちは関数Fの動作の右側に再帰が発生して右側に向かって積み上がってゆくの?という理解だったんですがもしかして全然違ってますかね(^_^;)
 まあ、使い方さえ分かってれば良いんだと思うんですけど・・

 あと、RoRでFoldRの例として奇しくも

 ハンバーガーの作り方が。これはハンバーガーショップを作る時に画像表示の関数で使えそうかな、とか。

 本日は以上です


2022/03/28
 RORを少々。宿直先だしとりあえず読みすすめるか、、と言うことで次の章、オークバトルへ。LOLにもあったけどこれが楽しみでした。いかにもゲーム的な処理だし!

 ところで先週、CLI版でハンバーガーショップのプロトタイプを作ろう!と思い立ったワケですが
 構造体zairyouに名称、ID、価格(得点)、イメージを作って
 メインの処理をするyuzan関数(海原雄山が注文するので)、sirouこれはステータスを複数持たせて更新するし構造体が良いのかな?を作って、、
 ゲーム自体はガワを外すと、コンピュータがランダム回食材を表示して、それを規定時間内に文字列として打ち込む、、、つ、つまんねーw(原作だと多分対応してる1キーだったかなあ)

 まあでもREPLの勉強には良いかな、とか。

 あと、頭に思い浮かんだ事柄を片っ端からLRでチェックして悪かったら正常化するまで操作するってのを宿直の暇に任せて1時間くらいやってたんですけど、ふと思い立って先日コピペしたピーター先生の推薦するタイプの違うプログラミング言語をやってみたんですよね。
 結果、C言語系はもちろん全滅だったんですけどw ショックなことにscheme common-lisp racketも動きが悪くなってしまいました。python、java javascriptも駄目でもう全滅かと思ったらclojureとgoだけ良かったんですよね。clojureって何だよと思ったら比較的新しいlisp系の言語らしい。良かったlisp系で!と言う事でlispやってれば半分以上網羅できるっぽいからオトクだな!続けよう(^o^)



2022/03/27
 とりあえずSRIFのReduceの定義を見てみますか・・Ridentity? 用例からするとBaseとか初期値? あとCheck-argってのは引数がちゃんとプロシージャかチェックするものかな?
 肝心の本体はFoldやん・・

 じゃあFoldの定義は?と見ると・・ええ・・KonsってCons?ReceiveとかCarsとか%とか・・これは手に負えないw

気分転換にRoRを読みすすめる。SnakePitゲームの定義があんまりにもこんがらがってたのと、座るのが不安だったので本当に読み進めただけだったんですが、次の章が「Lambda」と言いつつ実際は高階関数だったんです。この構成が上手い!高階関数を使うとあんなに煩雑だったコードがすごいスッキリ短くなるんです、これは威力を目の当たりにしてテンション上がりました。なるほどねぇ〜

 で、ここに自作のFold(R)の定義が。おおっ!分かりやすい!


 で、こっちがFold(L)。Lはちょっとややっこしいな・・。Consの形からしてもRの方が好きだなぁ(好き嫌いの問題では無いだろうけど)。

 CametanさんのコメントだとReduceってFoldLと実質同じなのかな?(Reverseになるので)。結果を見比べるとRは)))))がまとまるConsでLは((((でまとまるConsって感じだったけど、定義を見ると再帰を起こす場所が違うんですね。
 Rはよく見る形で(cons (cons (cons (consで分かりやすいけど
 Lは・・base引数に当たる部分で再帰の変化が起こり続けて・・Consが格納されてゆくと(ACC的な?)。 Fを*、Baseを1 Listを12345 として・・

   (*5 (*4 (* 3 (* 2 (* 1 1))))  

 あり?・・順番は逆になるけど))))になっとる。あ、前置記法だと全部この形になるか。ということは根本的に間違ってるなw Base内での計算の順番は関係無いということか・・ずるいけど逆に ((((5 )4 )3 )2 )1) みたいになってもらうためにはどうなってくれるのが良いか考えるかw 

 考えました!! 結果、やっぱり分からん(^_^;)

 そろそろ立ってPC打ってるのもしんどいし宿直あるので今日はここまでかな・・。

 あ、全然関係ないですが検索してたら「Basicに込められた想い」みたいな記事があって最初にBasicを開発した二人のミニ伝記みたいなのを読みました。良かった・・その流れでビル・ゲイツの「パンケーキアルゴリズムに関する学術論文」みたいな記事を読んで、これまた感心し更にその流れで
 SmallBasicなるものがあると知りました。へぇ〜WEBアプリとしてエディタが使えるらしいから甥っ子がもしもプログラミングに興味あるとか言い出したときには良いのかも?

 

 こういうのも見たので、複数の全然違うタイプの言語を使ってみるのも良いんだろうということで・・まあ、Basic入ってませんがw


 

2022/03/26
 ようやく多少動けるようになったけど座るのが苦痛なので手を動かすのは難しいという事で読書。

 なんか地元の図書館が最近の流行りに乗ってか妙にプログラミング系の新刊をぶっ込んでくるので流し読み目的で借りて来た。
 pythonの方は超絶基本的な内容だけど13歳に向けての本だし、、一応cametanさん式判別のためにforのところを見たらリスト内包表記は無いけど「まず変数に代入してlenで長さ調べて〜」とかはやってなかったです。
 C言語の方は、、未だに新刊で普通のCの本が出るんですねえ、、、string型が無いとか(ビビった)、配列使ったら強制的にポインタ必須になるとか、やっぱり毎回コンパイルがいるとか、、大変だなあと。

 あとはcametanさんのflattenの記事を拝見。4つの傑作パターンについて、、
 他の3つは分かったけどreduceは確かに分からない(^_^;) 定義しっかり見てみよう。前からsrfi定義も写経しようと思ってるけど出来てないなあ、、やりたいことが多すぎる(^o^)


 ムッ!これはしっかり見比べたら、絶対に勉強になるパターンや。


 これも!
 あとようやくマクロって結局放置してるのでsyntax-rulesのところを再読。前よりはなんか分かりそうな予感がする、、要するにあの形式ならifとかスコープ?無視の書き換えとか通常では許されない動作を許す関数みたいなのを書けるって事かな?

 まあ結局いつものごとく場数が足りてねえな?ってお話で。



2022/03/25
 うう・・ようやく動けるようになった!月曜日からの5日間、言ってみればすごく時間あったのにプログラミング関係のことは全然手につかなくてニコニコ動画ばっかり見てました(しかも前に見たことあるやつ)。治まるかどうか分からない痛みとかある時に学習とか無理ですな!

 まさか自分がウワサに聞いてたEmacsに入門するときが来るとは・・いきなり操作が全く分からないという状態だったんですが例によってm(_ _)m Cametanさんのアドバイス(と言うにはすごく詳細に解説してくださってるのです)で謎は解けました。なるほど先にファイルの種類を決めてしまうってのはWindowsユーザーの僕には無い発想でした(・。・; 
 と言うことはですね、Spacemacsの導入、成功し(て)たわけですね!やった!


 そしてコレ。この「そうだったのか!」と頓珍漢な発見をした(気になってる)様子って面白いなぁw・・自分のことだけど。しかしなるほど、コメントアウトを外す事で機能を解放する仕組みになってるとは・・GUIだとなんとかボックスとかで設定したりするけどテキストベースで行われてるんですね、頭良いっすねぇ。

 すごい人たちが「すごい」って言うなら試してみない理由がありましょうか?Spacemacsの日本語チュートリアルWikiみたいなのも見つけましたし、、
 ↓はCametanさんがリンク貼ってくださってた日本人Emacsの伝道師の方のサイトで過去の雑誌連載された入門記事ですが早速読み始めてます。


 日本語入力の方法も面白そうですね!僕も普段から連文節変換とか全く使わずに単語ごとに変換しまくってるので、これも試してみたいですねぇ。楽しみです!Cametanさん、毎度ありがとうございます〜



2022/03/23
 3日前の日曜深夜、宿直の待機時間でcametanさんのADV制作入門を読んでました。

 トーカナイズ!イイっすねえ!


 お〜 これも覚えておこう


 で、ここを読んだときに結構ガツン!と来たんです。なんと言うか「そうだったのか!」と言う感覚。以前から散々REPLに関して言ってもらってたけど、ADV制作の流れを経て(読んだだけだけど(^_^;)ようやく腑に落ちたというか!
 で、明日帰ったら早速流れを真似て、まずはCLIでハンバーガーショップのプロトタイプを作り始めよう!と。こんなに翌日が楽しみで床についたのも久々やな!という感じでした、、
 そして翌日、宿直明けでチャリを漕ぐ脚も軽く帰宅して、シャワー浴びるか!とズボンを脱ごうとした瞬間、、ゲーッ!
 ぎっくり腰やってしまいました(-_-;)
 結構重度の痛みで、まだ座ることは出来ない状態で、、(昨日は根性で宿直には行った)。ちょっとこれはこれで興味深かったので詳細は別記事で。
 しかし好事魔多しと言いますか。あ~あ、、、もうッ!ちょっとお預けとなりました。


ところで


 やっぱり!いや、検索してもracketのGUIでのサンプルゲームとか全然出てきませんもんねぇ?gooブログだけだと勿体ないので素材部分は差し替えてkindle出版とかいかがでしょう?






2022/03/20
 Spacemacs!昨夜Cametanさんのブログで知ってから楽しみにしてました。起きて早速インストール!

 ま・・苦戦しましたね(^_^;)
 今から思えば、以前中途半端に環境設定でPathを通したことがあったからなのか?設定ファイル置き場の.emacs.dってフォルダが全然出現しなかったんで、もうあらゆるバージョンを試した結果Pathを消したりなんだりしてようやく
 キターッ!!


 が、モードの選択などをして追加パッケージの読み込みになってからだめ。再起動やらファイルの再DLからの再インストールなどもやってみたけど、どうしてもこのファイルの利用不可メッセージが大量に出て動かず。毎回.emacs.dも消してるんですけどねぇ・・。
 気になるのは最初に成功してモードを選ぶなどが一度あったきりで、そのバージョンを変えたりしてもその選択は表示されず、勝手に進んで?毎回このファイル利用不可で止まってしまう事・・どっかに設定ファイルが残ってしまってるのかな・・Spaceは諦めて普通にカスタマイズとやらをするかなぁ・・

追記:すぐ後に同じ事で困ってる人を発見、現在書き込みのあった
 での方法を試したところDLが行われつつあるところ!うまくいくか!?

追記:いくつかエラー出てるけどスペースでメニュー出るようになった!


追記:ようやくdotspacemacs-configuration-layers に書き込むってのが分かった・・で、Common-lispとSchemeを書き込んだんだけど、どうやってそのモードに変えるのかが分からないw。
 ここを左クリックしたらモードを切り替えられそうなものなのに出来ない・・
 これじゃアカンのやろか。今から宿直、今日はこれまでじゃ~

追記:宿直待機中に見返してて気づいたんですけど、;;ってコメントアウト記号じゃないなコレw ここに設定書くんか!明日が楽しみだ!


2022/03/19
 引き続きDungeon & Rucketを理解に努めつつ打ち込む。
 
 Make-posnって?座標を作る専用の関数があるのか・・それとも座標の表現に極めて便利な2つの値限定のValueって事なんだろうか?
 実験してみたら求められるのはlist-of-posnsって型らしい。と言うことはplace-image(s)を使うときには絶対にmake-posnを使わないといかんということか~

 Append-mapの挙動も不安だったのでMapでどうなるかを・・おお、List内List。なるほどAppend-mapだとひとつづきになるか・・あと、今更なんですけどLambdaの入れ子の形をようやく意識出来ました(^_^;) この形絶対に身に着けないと!


 これも覚えておこう!

 「ババ抜き」で散々悩んだことを既にこちらでしっかり解説していただいてたというね・・やっぱりちゃんと順番通りにやらないと。

 という訳で、とりあえずDungeon & Rucketは打ち込みながらの理解フェイズが終わりました。今後はとりあえずBig-bangつながりということでテキストアドベンチャーのもやった上で、Dungeon & Rucketとババ抜きをCametanさんが作られてる過程に当てはめてハンバーガーショップを作ってみようかと。素材集めが結構大変なんだよなぁ・・

 あと、この辺はかなり苦労して理解したつもりだけで自信を持って「本当は分かってない」と言えるので、復習します!



2022/03/17
 Cametanさんからのアドバイスを拝見する。むちゃくちゃ参考になりました!あ、「構造体そのものを返す関数」だと理解したら良かったのか!そして「使ってないけど仕様上仮引数としてあるだけ」ってのも分かってスッキリしました〜。
 Emacsの()の色付け・・やっぱりそういうのあるんですね(^_^;)ぱっと見た感じだけどすごく分かりやすい・・実際に自分で打ち込む時にはインデントを意識して書くとして、ソースを見て学習するときにはすごく良いかもなぁ・・インデントは例のKindleに送るときにはちゃんと再現されるんですが、単純にテキストをコピーしてKindleに送るだけだと削除されて左詰めになってしまったりしてたんですよね。
 以前に教えてもらってたと思うのでEmacsの導入を考えてみます。カラーリングされた上にインデントもちゃんとされてるソースを見たら作法とか読み方とか身に付きやすいと思うので!

 更に「ハンバーガーショップ」のPC6001のリストまで!そういうのも公開されてるんですねぇ・・!RoRとLoLとCametanさんのサンプルで学習したら懐かしのプログラムを習作として移植しまくるって良いなぁ・・ありがとうございます

 宿直中だったのでCametanさんの「ババ抜きをつくろう」をポメラで打ち込みながら読みすすめ、ようやくラストまでたどり着きました。
 おおっ!最後のwって?と思ってたらこういうことか・・。解説分かり易い!

 このRepl部分のバージョンを上げてゆく過程とかすごく参考になりました。実際に打ち込みながらだとエディタで遡って関数の定義を確認できるのでやっぱり実行できないポメラであっても打ち込みながらの勉強って大事ですね。これは是非以前の12歳の〜の2つも同様にやってみないと。今回ババ抜きを写経させてもらってて、なんかちょっと理解が進んでる気がするぞ?という感覚があったので・・

 ところで我が家で唯一バッテリーがしっかりしてるのはChromeBookなんで、これでRacketが使えたらなぁ・・と。
 以前にも軽く調べてだめだったけど、諦めがつかずに再度検索。おっ?
 なんかWEBサービスでRollupというのを発見。サーバー側で実行してるのをリモートPC的に操作できるものっぽい。これなら端末の種類問わずに使えるかも・・とスマホで設定して・・

 ↑これ、ChromeBookで操作してる画面ですが・・・う、動いてる!ま、でも結局動作がトロすぎて全然使い物にならないんですけどね・・。もうちょっとかなぁ・・・最近またChromeBookがやたらと攻めてきてるので(SteamとかFlexとかニュースをよく見る)、そのうちChromeBookでもちゃんと使えるようになると便利だなぁ



2022/03/13
 帰宅後検証。このプロシージャは間接的に構造体を使ってるからここだけ引数をw以外にしたら動かないだろう!

 と、思ったら動く!ぬぅ・・これはもう形で覚えるしか無いか・・


 ネットで他にBig-bangについて質問をしてる人がいて、それに対する注釈付きの答えがこちら。いや、これなら全然分かるんだけどなぁ・・対象がリストで数値だし。構造体の場合直接「big」「small」を参照してる?ところは納得行くんだけど・・これは構造体の基本をもう一度しっかりとやらんとイカン予感

 夜、ババ抜き2を勉強させていただく

 なるほど・・僕の場合は)がどの(に対応してるのかをすぐに把握できないという「それ」以前のレベルかな・・人類がカッコを10種類くらい発明出来たら・・もしくはエディタで自動で色分けされたら楽かもな・・とか

 これは確かに思いましたw


 むっ!? 別にBig-bangじゃないのにこの形が出てる。やっぱり構造体の基本分かって無いな・・
 と、ここまで書いてる時点でCametanさんがブログ更新でフォローしてくださってるのを発見!とありあえず「そーゆーものだ」という事で理解しておいて・・12歳からの~を飛ばしてババ抜きを先に写経し始めたのでちゃんと読んでませんでした、すいません(-_-;)
 今回の記事ももう一度じっくり読ませていただいて・・

 ところで、ちょっと触ってる感じBig-bang(2htdp?)を使ったらRacket使ってPC6001で遊んだ思い出のゲーム「ハンバーガーショップ」を実現できそうな気がして来たんで頑張ります(^o^)



  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「プログラミング」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事