星田オステオパシー

プログラミング日記 2021/12/21〜

2022/02/09
 Cametan42さんの根気強い解説のお世話になるのであった・・僕はなんて飲み込みが悪いんだ・・ありがとうございます!やっぱり定義とかをちゃんと理解して定着させる習慣が無いからだろうなぁ・・改めよう!と、これまた何回も決意してることなんですけど(^_^;)

RacketがPLT Schemeから改称した大きな理由は「Pythonみたいな可愛らしい(?)名前にすれば人気が出るんじゃないか?」って事だったんだけど

 ↑これは笑った。そんな理由で・・・どうせなら検索でテニスとかの記事に引っかからないような特殊な単語にして欲しかったところ

 オススメされてたこの人の記事も読んでみよう。それにしても・・これはいかにも普通の人ではないという感じの頭の形ですねぇ・・賢そう

 更にthunk関係やらも後で・・今回こそはキッチリ理解してから進もう。

 ところで、出張の帰りに電車内でスマホを開いたらニュースが。
 なにィ!? まあ、とりあえず驚いてみたものの実際のところどれだけの衝撃なのかは分からないんですけどね!Lambdaを奪われた感・・ありますねぇ


2022/02/07
 Land of Lsip、新章突入!ってことでHunt the wumpusを。実はゲームのルールがよく分かってないんですよね・・臭いとか音でWumpusの場所にあたりをつけて矢で射殺せば勝ちってことなのか・・?ま、正直実はこのゲームにはあまり興味がない(例の悪ノリタイトルとイラストは最高だったけど)。それよりもオークバトルと人工生命が楽しみなのだった。

 Bloogerで作った新しいブログ。画面がシンプルでいい感じ。「ページ」って概念も固定したい情報がちゃんと固定できてイイねぇ!気に入ったのでTwitterのタイムラインをサイドカラムに入れてみる。ちょっと色が浮いてるけど・・ま、エエか!Gooブログも前はTwitterのタイムラインをパーツで入れられたはずなんだけどいつの間にか機能が削除されていた。そーゆーとこデスよね(^_^;)

 追記:data-theme="dark" を入れるだけでダークモードに出来ましたわ。あと、GooブログでもHtmlでのツイッター埋め込み出来るみたいなんですけど「有料プランのみ」らしいっすね・・ホンマこの・・


2022/02/06
 やれやれやっとこさLand of Lispのグラフ描画プログラムの学習が(とりあえず)終わったか・・身についているかは分からないが、一つ言えるのはプログラミングの学習ほど僕にとって頭を使う作業は無いという事ですね。少なくともボケ防止には役に立つ、これは間違いない。

 宿直の待機中にKindle unlimitedでプログラミング関係の読書をする。


 デジタル署名を使ってアート作品なんかの無二性を担保、資産とするという・・これ流行ってるのか。なんかメタバースとかってのも聞くけど、今程度のテクノロジーだと以前流行したセカンドライフと同じような結末を迎えるんじゃないですかねぇ?マトリックスよろしく脳直で接続できるようにならないとなぁ・・


 なんだかんだでこの人の本好きなんですよね。昔のパソコンとかマイコンの話が好きなだけかも知れないが。コンピュタを本当に理解しようと思ったらインタプリタとか言語を作らないといかんとかは聞きますよねぇ・・Lispはそれに向いてるっぽいけど・・まだちょっと(?)早いかな・・

 またこの人の本。ワールドをシェア出来て各自が自由に拡張可能な汎用テキストゲーム世界を作るという・・多分そういう試み。C#が理解できないのもあって途中で挫折しました。PythonかLispで書いてくれてたらなぁ・・

 別にプログラム作って一山当てるぜ!とか思った事は無いのですが、まあアプリ制作などの現状を知っておいても良いかなと思って。ちょっと驚いたのは「Unreal Engine」のブループリントについて。なんかコードを書かなくてもマウスでアイテムを配置したらゲームが出来るってマジで!?Scratchが同じような感じなのかも知れないけど(これには全く興味なし)、どういう仕組で出来上がるのかは興味あるなぁ・・ものは試しで一度「Unity」も「Unreal Engine」もいじってみようかな・・


2022/02/03
 宿直明けでとりあえずPCの電源を入れる。この「とりあえず入れる」ってのが大事だな!

 Land of Lispのグラフソフトへの受け渡しプログラムの続き。pair-for-eachの挙動が分からなさすぎて(そしてLambda・連想リストの挙動が正確に理解出来てないせいで)、ず~っと詰まる。結局、ギブアップ寸前でデバッグモードをじっくりと2周回して観察することでようやく分かった!(気がする)。先頭から一つずつ引数を減らして行く再帰みたいな働きをするんかい!まあ、これでなんとかスッキリした・・。面白かったのはassocを述語みたいに使ってるところとかですかねぇ



 Kindle unlimitedで「正規表現」の本を探していたときに見つけていた「秀丸」を使ったシリーズ。折角なので読んだところ大変面白かったので秀丸に興味が湧く。実はWindows95の時代にシェアウェアで買ってたんですよね!日記を書くためだけに(4000円もするんです・・贅沢な使い方・・)。OSの入れ替えを何度もするうちに面倒になって入れてなかったのだけど今回20年ぶりくらいで入れました。アウトラインが使えるようになってたとは!マクロを使ったらLisp用にカスタマイズ出来たりするんだろうか・・?


2022/01/29
 5章へ。6章以降は言語依存だったりの解説なので、この章で実質最後ってことで良いだろう。

 5.1.1
 効率の事を考えるほどのレベルでは無いけど、まあ知ってれば今後が違うかな?前にもあったけど選択の場合にマッチする可能性が低い方、特徴がある方、長い方を左側に持ってくる事でバックトラックの回数を減らす。

 5.5
 ループ展開。基本となる "[^]+" を組み合わせることでいくつかの型を作ってしまおうという事かな?こういう型をつくってちゃんと動くかどうかの検証方法を教えてくれてるのか・・まあ、いつか役に立つかもな!
 「開始 通常要素* (特殊要素 通常要素 通常要素*)* 終了」
 のパターンは気に留めておこう(覚えておける自信は無い)。
 特殊要素と通常要素が同じ位置でマッチしないようにする
 特殊要素は無とマッチしないようにする。特殊要素に*を使うなって事かな
 (...*)* の形であっても特定のリテラルを条件に入れることで無限の繰り返しを防ぐ仕組みがあれば使っても大丈夫・・と。

 うーん、こんくらいで良いんじゃない?今後どういうことをやってみようと思いつくか分からないけど、まあ永久マッチになってしまったりするような事さえ無かったらエエやろし・・詰まったらそこでまた読み返そう。じゃあ次回からLoLに戻ろう!つまり再帰するわけですな~


2022/01/29
 ワクチン当日も夜までは正規表現を読んでたんで、その復習がてら・・

 「4.7.2厳密に考えよ」がムズすぎるw 例として上がってる論理行が複数行にまたがるのにを使う例とか・・教養的にはあってもいいだろうけど実際のところ僕が今後出会うだろうか?いつか必要になって分かるときが来るかも知れないから・・未来の自分に期待だ!とを別物と判定させる必要があるときは8進数エスケープとやらで厳密に指定するとか?

 「IPアドレスとのマッチング」のところは・・基本だけど.でドットをリテラル扱いと・・ん?「^...$」で囲むって?ああ、厳密にこのIPアドレスの形だけで独立してチェックできるように先頭とケツを固定してるということか?これは要チェックやな。
 255以下の数しか許されない縛りからの 2[0-4] [0-9] | 2[0-5][0-5] はなるほど~・・これを使って [0-9]|[0-9][0-9]|[01][0-9][0-9]|2[0-4][0-9]|25[0-5] で完璧やん!とか思ったら最初の合体させて [01]?[0-9][0-9]? だと・・?エレガント!あれ?けど今頭で再現しようとしたら [01]?[0-9]?[0-9] だと思ったが?あ、ちゃんと問題になってる。前者の方が検索が速いらしいが分析をしてみろという・・フフン・・全然分からん! あ、いや、ん~・・例えば9のみだった場合でも99だった場合でも下二桁はどの数字でもマッチするから2個目が存在する時点でオッケイってことか、な? 否定先読みに関してはとりあえずPerl専用みたいなのでスルー。
 入れ子の()のマッチは不可能なのか・・じゃあLISPのプログラムソースをテキスト処理でどうこうするとかは出来ないということ、か・・?

 「4.7.5区切られたテキストのマッチ」のところ。デリミタ(区切り文字の事だって)の入れ子や別の使い方をされてる同じ記号だったりするとややこしいから、最初のテキストを作るときに最初から正規表現を意識した文字使用の規則を作っておかないといけないとか?
 
 そして読み返してみても「あ~やっぱり駄目だ~」となるのだが、最後のまとめを読むと実にあっさり風味。マッチメカニズムについてはまた必要になったら勉強し直そう。まあ、なんか問題があった時にはデリミタ関連を疑ってNFAだったら最初に長いのをチェックするようにしておくとか、そういう感じでエエんかな・・

 今日はここまで~



2022/01/25
 今日はバイトのハシゴなんで正規表現の勉強はお休み。世界平和を祈りながら掃除をしておりました。
 で、Gooブログのアプリでお知らせをチェックすると・・あれ?Cametan42さんの更新のお知らせが。しかしこのサムネイルは・・?
 ちょっと・・Racketって想像以上に楽しい造りになってるんですね(^o^) 
 そしてサンプルと文章が素晴らしい!やってらっしゃるのは僕がRacketでやってみるかな?と思ってた完全上位互換なので正規表現とLand of lispが終わったらじっくり勉強させていただきます!うーん、これは念願であるベーマガ掲載PC6001の思い出ゲーム「反射衛星砲」「ハンバーガーショップ」「競馬ゲーム」の移植も夢じゃない!


2022/01/24
 正規表現の4章を読む。これは一度4章の最後まで読んだあとでまた読み返さないといかんな・・

 原則の話、マッチの優先は対象の左端からの位置で決まると。orでのマッチは後の方でto|tour|tournamentの話で詳しく出る解説と併せて覚えておかないとな~
 一部のメタ文字が貪欲だという話。それを利用して*で最後までマッチチェックをさせることで参照のための変数に入れるというヤツね。はぁ~なるほど~(よく分かってないに違いない)。

 そしてNFAとDFAの話。これは・・一度読んで分かったかな?とか思ってたけど、今読み返したらもう分からなくなってる。
 NFA、正規表現内の要素から要素へチェック。orなんかで特に工夫が必要、左端を一番長いものにしておかないといかんとか、仕組みとしてバックトラックがあるとか、それ故に前方参照が出来るとか?
 DFA、テキストに対してorは同時並列的にチェックされる 

 書かれてるようにNFAの方が
to(ni(ght|te)|knight) とか
tonite|toknight|tonight とか
to(k?night|nite) なんて
パズル的な面白さはあるなぁ・・けど実際使うとなるとDFAが楽で良さそうな?

 複数文字でのクォート。
[^( って感じで()でくくって1文字扱いとか出来ないのか?とか。

 ?は貪欲で|は左に最長のを持ってくるとか工夫しないといかんと。というわけで4-6までで本日は離脱。

 「選択」は怠け者ってのはリアルでも注意しないといけないですね。.の代わりに[^/n]ってのも頭良い!「とあるもの」全部の時に「それ以外のもの全部」ってので置き換えるのは現実世界でも大事な考え方な気がするなぁ


2022/01/22
 詳説正規表現3章まで読了。3章は「読み物として楽しもう」的なことが書かれていたので堂々と読むだけに徹する。

 興味を引かれたのはemacsの
(define-key global-map "c-xc-d" 'FindNextDv1)
 とかってしておくとCtrl-xとかCtrl-xで実行できるという話とか

 バックスペースのと単語アンカーのの話とか(Racketで//bになってるのはこれが関係してるのか)

 ()を使ったグループ化の部分、見易さとかだけじゃなくて前方参照のための指定にもなってるの、よく出来た仕組みで便利そう!Perl良いなぁとか思ってたらPythonにもちゃんとあるのか!とか。今検索したら前方参照、Lispにもちゃんとあって・・そりゃそうか

 って感じでした。ちょっとだけ4章に入ってみたけどマッチの実際の仕組みとか・・細かいけど面白いですなぁ


2022/01/21
 という訳で詳説正規表現の2章まで読み終えました。
 解説のサンプルとしてPerlとやらが使われてるんで、特有の機能だったりは読むだけスルーで。ただ、面白かったのがマッチが終了した()の中を勝手に変数に保存してて、後から参照できるところかなぁ。これ便利っぽいですね。
 以前に
 [ ]での選択と|(パイプ?)でのorを分けてる意味が分からないと思ってたけど、パイプを使った場合は*を併用して複数の文字でマッチできるって事か!なるほど~。小文字と大文字で「それか、それ以外か(ローランド風)」を分けられるのも良い!sだと大文字小文字の区別を見落としそうだけど。
 テキスト整形とかはPerl依存になりそうなので流し読みで理屈だけ読み取るようにして・・終了。

2022/01/20
 とりあえず詳説正規表現の1章を読み終わった。Cametan42さんのレクチャーである程度予習済みなので今のところは「面白いなぁ」という感じ。イマイチ重要性が分からなかった「*」だけど、(0個以上の)空白の存在を許すのに使うってのはなるほど!
 1章で新しいのは「前方参照」ですかね。これは今の所それほど感銘は受けないですかねぇ・・それよりも時刻正規表現を24時間時計に応用するの表現方法は面白かった!
0?[0-9]|1[0-9]|2[0-3]  と
[01]?[4-9]|[012]?[0-3] は思いつかんかった。
[01]?[0-9]|2[0-3]  が思いついた方法だったので良し

 単語の境界は //bよりも/<の方が好みかなぁ。今回はここまで。USキーボードで日本語マップだと|が打てないので結局本体のキーを打ってると言うね。あと、戯れに接点回復オイルを吹き付けたら偶にキーが暴走するようになってしまった・・完全に乾いたら大丈夫なんだろうか(^_^;)


2022/01/19
 また間が空いた!一応理由はあるんですがアホみたいな失敗が原因なので・・ちょっと運が(?)悪すぎるので明日あたりお墓参りに行ってこようかと思ってます。

 さて、本日

 詳説正規表現が届きました!お、思ってたよりは分厚くなかったかな(^_^;)
 前書きを読むと「まずは読み物として楽しもう」とのこと。早速読み始めるとする。


2022/01/16
 気づけば日数が空いてしまった!いかんね~・・まあけど忘却曲線的にそろそろ復習するには良いかも?ということで
 まずは正規表現の繰り返しまでの復習を。細かいところは早くも結構忘れてますw

 その他の関数のチェック。おお~なるほど。図書館に「詳説正規表現」が届いたとの知らせがあったので、この流れでちょっと正規表現の勉強してみるかな・・

 区切り文字のチェック。なるほど・・


 Cametan42さんに紹介してもらったRacketのGUIを試してみよう!と思ってWindows10のパワーシェルでコマンドを入れてみるも駄目。あれか・・パスが通ってないということか?



 公式からGithubに飛んで、Instllationに従う。ファイルは公式のソースじゃなくてGithubに置いてあるのじゃないと入らなかった

 インストールはちゃんと出来たけど起動はやっぱりパワーシェルからは出来ないのでw


 起動方法として書かれいていたRacketに直接requireするとちゃんと出ました(^o^) 全然使ってないけど、これってWindowに画像を表示したり出来るんかね?出来るんだったら「魔法使いの家」とかかなりゲームっぽく出来るなぁ!


2022/01/12
 正規表現の書写。
 単語の先頭のチェックの「」ってのに苦笑う。単語の末尾は良いけど。
 当たり前だけど[]の中は対応してる文字でも1文字しか駄目なのですね

 こっからやな~。?の0個ってややこしいかな~。




 オッケイ、理解した!

 ほいほい

 あれ?2個でも#f・・・?

 ふんふん・・返り値のパターンが謎なので追加で

 ほー・・ワイルドカード部分を含めて条件に当てはまる部分を全部と、最後のワイルドカード部分を返すのか?


 間違いない模様。

 ん?あれ? あ、?の位置を間違えた!けどエラーじゃないのか・・

 こっちが正しい書き方だけど・・?を後ろにつけた場合が謎だ!

色々と試したけど全部そのまま返されてきてしまう。うーん・・


2022/01/11
 明日も宿直に急遽決まりまして、昼間は施術で埋まってるのでちょっとPC触れそうに無いなあ、、という事で正規表現に再度挑む。あ、n,m分かった!やっぱり体調悪いと(より)駄目だなあ。
 では以前書いてもらってた正規表現の部分を見てみよう
 おお、分かる! ありがとうございます〜




2022/01/10
 バイトの宿直中に書いてます。昨夜は宿直だったんだけどもなんかダルくて。デコを触ると熱いので風邪だ!って事で10時間寝まして回復しました。ヘタに風邪引くとコロナ疑惑かけられるからなあ〜
 寝転がりながらcametan42さんの正規表現の解説を拝見、繰り返しのn,mで脱落。



 それはそれとしてracketでguiの記事を拝見、オオッ!これはちょっと試してみたい!

2022/01/08
 いや~ここ数日バイトと本業と(あと小松左京の小説)で忙しくって・・今日はようやくちょっとRacket触れました。

 あと、Cametan42さんに紹介してもらった正規表現の本ですが隣の枚方市に蔵書があったのでラッキーとか思ったけど貸出中でした。やっぱり人気あるんですねぇ
 相変わらずオライリーの本は表紙がキモいけど。とりあえず図書館で取り寄せのリクエストしてきました。あと、結局「素数夜曲」は全く読まずに返却期間がw。もう一回リクエストしよう!あとLand of Lispもコードの解説が無いとサッパリなのでもう一度リクエスト中です(^_^;) まあ、コードだけ見て推理するのも勉強になるような気もするけど


2022-01-05
 昨日から今日お昼にかけてバイト&宿直に加えて支援金の申請がらみで何も出来んかったー!

 って事で午後からようやく2日ぶりでRacketに触れました。とりあえず正規表現を使わないパターンをちょっと頑張ってみて、その後正規表現パターンもねっっとりやらせてもらおうかな、と。
 今、KindleFireがらみでKindleUnlimitedに入ってるんで、とりあえず無料で読めるもので正規表現を扱ってるものが無いか?と調べるとJavascriptを使ったものではありますが1冊、秀丸エディタ(懐かしいwライセンス持ってます)がらみで1冊という感じ。まあ、入門書を読む前にザッと目を通してみようかな、と。

 ただ・・KindleUnlimitedの今のラインナップが!「日本沈没」もサイコーでしたけど続けて読んでる「果てしなき流れの果に」!現在38%ですけど噂に違わぬ出来の良さ・・他にも小松左京の作品多数、「二十歳の原点」も気になるし時間が〜


2022/01/03
 お正月に帰省されてるご一家の連続施術があってヘロヘロ。更にジモティーで古いヘルシオが0円でしかも近場だったのですかさずやりとりしてゲット。しかし予想以上にデカくて台所に入れられない・・などとやってたら既に夜!とりあえずCametan42さんの記事を参考にLand of Lispの魔法使いの家での気がかりtweak-textの見直し。
 そうか末尾再帰への書き直しという裏テーマがあったとは・・
 で、コメントとして疑問とか書きながら理解に努める。ああ!名前付きLetを使えば2つに分けてたあの書き方をやめてまとめられるのか!こりゃ便利だ!
 そしてまた分かってしまった・・全然理解出来てなかったことがな!tweak-textの引数litって#tだったら小文字にするとかかな?とかテキトーに考えてたんだけど、ちゃんとコードを読んだら違うじゃないか!(既に大文字にするためのフラグがあるのに小文字にするフラグを作る必要がないですもんね)。ああ!「”」があった場合にその中は大文字小文字変換をさせない為のフラグで最初の”でon、次の”でoffにするってこと!?なんで#fじゃなくて反転なのかようやく分かった!はぁ~なるほどねぇ・・頭良い!!
 全然理解できなくて2時間くらいモニターを睨んでました(^_^;)

 これでとりあえず魔法使いの家は終わりで良いかな・・で、Land of Lisp、次はグラフを描くソフトに渡せるようにデータを出力するってのがあって、その後にその機能を使ってWumpsになるわけだけど・・データの整形ならSchemeで出来そうな・・まあ、デキるところまでやってみるか。魔法使いの家の時はどうしても分からなかったらこちらを参考に出来たんだけど、今回Gauche特有のライブラリとかを使ってるっぽいんだよなぁ
~~~~~~~~~~~~
~~~~~~~~~~~~

 ところで
 えっ!ゴーシュって読むのか!ずっと(なぜか)ガウチョだと思ってた!


2022/01/02
 ボードゲームで忙しくなるのは分かってたので宿直中にちょっとだけでもプログラミング関係の事柄に触れる。
 実用CommonLispで「Scheme」についての章があるんだな~とか思って読み始めたが勘違いしてたことが分かった。Schemeを使うんじゃなくてSchemeをCommon Lispで作るという!ほぇ~・・非常に興味深いけど、まずはLand of Lispの続きをやってから実用CommonLispには取り組むということで!SCIPも途中で断念してるけど気になるしなぁ・・寿命がいくらあっても足りないぜ!


2022/01/01
 明けましておめでとうございます!29日から今夜まで連続宿直でして、結局Racketを触れてないというね!

 いやしかし昨年はまさかのLISPとの出会いで全く予想をしてなかったプログラミング学習になってきました〜。Cametan42さんのご助力無かったら速攻で挫折してましたわ・・ありがとうございます!今年は書こうかな?と思ったコードは鼻くそをほじりながらでも書けるように頑張ります!

 さしあたって・・そうですねぇCametan42さんのWhenとかUnlessの解説部分でリンクを貼っていただいてRaketの日本語レファレンスを読んでみたいな、と。並行して「素数夜曲」も全然読めてないしLand of Lispの残りのプログラムについても移植をすることでLispの理解を深めていきたいしでやること山盛りですなぁ。

 今夜は宿直なんでこれから寝るまでの時間を使ってCametan42さんの解説じっくり読ませていただきます。シンボルって概念が身に付いてなかった感じです。


2021/12/29
 ついにLand of Lsipのサンプルプログラム「魔法使いの家」をRacketで再現することに成功した!まあ、かなりズルい手を使った結果ではあるが。いや〜助かりましたCametan42さん(^o^)

 自分でどうしても動かせない部分はCametan42さんのコードをコピペして、動くようになってから理解するという方針にしまして、一応は「なるほどそうだったのか!」と思えるように頑張りました。

 その後、例によってアドバイスをいただけてるであろうCametan42さんの最新記事を拝見したところ・・

 僕が詰まっていたところを100%の精度で予知されていた!!そのものズバリNullと#fとの違いで脱出を失敗するだろうとか、文字列変換・文字セットの一件とか、ちょっと時空が歪んでるのかと思って頭がクラっと来ました。

 けどまあ、とりあえず段々とLispというかSchemeというかRacketの動作が分かってきたので非常に楽しくなってきましたね、ええ!
 引き続き学習?を続けていこうと思います!


2021/12/28
 本業とバイトと初めてのzoom面談のスキを突いてラストコーディング!
 とりあえず打ち間違いなどの訂正をして(game-repl)を実行してみたが、、エラーでコマンドが入らず。
 今日で決着だと思ったんだがな〜

 しかし関数の引数に#tと#fを設定して、それをオンオフにして動作条件を変更するとか!なんかすごく可能性を感じるなあ

 あとは、、宿直だとPCが無くてプログラミング本を読んでも無駄だと思ったのでキンドル読書。「日本沈没」、映画、ドラマ、漫画は見たことあったけど原作は未読だった。面白いねえ

2021/12/27
 宿直から返って今日こそは!と思ったけど月次支援金が飲食業だけじゃなくて整体でも申請できそう?となったのでその手続に大わらわ。なんとか明日の予約を取って午後から施術、夕方に納税証明書を隣の市の税務署まで寒風吹きすさぶ中バイクで往復してヘロヘロになって布団に入って眠ってしまう。八甲田山とか辛かったやろなぁ・・

 で、食って寝てようやくMPが回復したので魔法使いの家を終わらせるか!と始めたんですけど・・最後に来てムズいわ~コレ。とりあえずCommonlispの原文に読み下し文をつけるだけで終わってしまった(24時までしかやんない)。


2021/12/26
 今日はいよいよ魔法使いの家ラストか!と思ってたのですが朝から本業x2でそこから宿直ってことで全くパソコンを触れませんでした・・
 毎日コードに触れないと!ということで宿直の待機中にスマホでCommonlispのインタプリアプリを起動して・・と思ったんですが
 ええ・・(-_-;) なんか打ち込めるんだけど実行ボタンとかそういうのが無いのだが・・やっぱりPC持ち込まないと駄目か~


2021/12/25
 昨日、なんでBeginを使わずに複文が通用しているのか(Beginでくくってもちゃんと動く)?ということで例によってCametan42さんから「確かに複文なんだけど暗黙のProgn」ということを教えていただきました。
 折角なのでちょっと検索してみると
~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~
 あ!Lambda式で確かに見た覚えあるよ!確か説明では前から順番に式を評価してゆくって表現になってたと思うけど、なるほどこういうちゃんと理屈が分かるとスッキリするなぁ!ありがとうございます!要するにCondでは良いけどIfでは駄目なんですね、覚えておこう!

 Land of Lispの魔法使いの家が佳境に差し掛かってきた。明日には終わりそうかなぁ・・ちょっと寂しいかも。まあ、まだまだプログラムはあるんですけどね(^o^) 
 WumpsとOrc、進化ゲームは楽しみだけどDice of Doomは読んでる時全く理解できなかったのでちょっと不安かな

 図書館で予約していた数学本「素数夜曲」到着。開いてビックリ

 この開いてるところまでが本編?の数学講義で残りは全部「付録」の「Schemeを使った数学プログラミング」です。著者は京都大学の先生らしく挿絵で例のλ山がありました。京大ってLispの拠点になってるんですかねぇ?実用CommonLispも面白くなってきてるしこりゃ正月どころではないな~



2021/12/24
 メリークリスマス!今日もバイトですがね、HO-HO-HO
 昨日魔法使いの家のコードで気になってた部分があるのでそこだけチェック

 ここ、(set~ のところと `(you~ のところって複文ってことにならないのかな?Beginいらんのかい?というのが気になって・・。

 Beginでつないでもいけるやん! `でくくられてると特別なのか?けど ’でくくられてるのは「式」だというし。どっちでも動くってのが謎だなぁ

実用CommonLisp読書
 4.10辺りまで。と言っても「GPS」ってコレ、概念的なプログラムの構造を説明するための仮想的なコードですよね?という気持ちで読んでるので全然手を動かさず。
 折角スマホでCommonLispを動かせそうな感じなのでもう一度最初から全部手打ちして動作を確認しながら読むべきか・・Schemeに移植するってのは理解の助けになってる気がするので、Land of Lispの後、移植に取り組むということでそれまではザーッと読みすすめるべきか・・

 あ、スマホのKindleで実用CommonLisp内の検索がいい感じじゃないか!

 力技で全部ピックアップしてくれる感じ。


2021/12/23
 追記 アマゾンのアンドロイドタブレット買ったので使えるLISPの環境が無いのか?という話。

 探してみたらcommonlispのインタプリタだったらアンドロイドでありましたわ。テキストエディタ的に使えるので実用commonlisp読む時のお供にするのは良さそうだなあ。


 プロシージャの件はCametan42さんの解説で完全に理解した!と思う

ハッキリ言うと、プログラミングに関して用語で混乱するのは、「プログラミングを学ぼうとする人が文系の場合」に限んないの。理系でも混乱する。
っつーか、数学とか一般に自然科学、って言われる理学系の分野だと用語はもっと明確に定義しててブレないんだよ。ところがプログラミングの分野だとメチャクチャ過ぎる、ってのが正直なトコだ。
これ、工学一般がそうなのかどうかは知りません。でも少なくともこの辺が証明してるのはプログラミングは理学ではない、って事です。

んで一般的定義はさておいて。実は用語的にはSchemeには関数がありません。SchemeにあるのはProcedure(手続き)だけ、です。
これはSchemeには関数がない、って言ってるんじゃなくって、一般的に言う関数がSchemeの仕様上ではProcedureと呼ばれてる、と言う意味です。メンドクセェだろ(笑)?

 ここはいつもやってるテキトー理解で良かったのかw。たまたま「厳密にみていかんとアカン!」とか思ったタイミングで引っかかってしまったのでした。あと、毎回なんですが今回の連想リスト問題でも大変詳細な解説をいただきました。Racket移植の記事は「またエラーで動かねぇよ!ギャハハ!」ってノリで書いてしまってたのではと反省(-_-;)

 次のRacketで・・はCametan42さんの書いてくださったのをベースにして連想リストの詳細学習にするか~


2021/12/22
 findでなんでリストが返ってくるの?問題で色々と見てるけど「cdr」を都合よく無視するって部分、あんまり納得の行く話が無いかなぁ・・ただそういう仕組みになってるって事なのか
 Land of Lispの元のコードサンプルによると
> (find 'y '((5 x) (3 y) (7 z)) :key #'cadr)
(3 Y)
 ってのがある。キーワードは無視するとして、連想リストをそのまま返してくる仕組みっぽいからかなぁと、思ってたらCametan42さんのブログで

いずれにせよ、Pythonの辞書型と違い、「連想リスト」はキーを含むリストを丸ごと返してくるので、最初は慣れないと凡ミスを行います。
しかもLispも、「ハッシュテーブル」(Pythonの辞書型にあたる)を使えばキー「じゃない部分」を返してくんだよな〜。

 あ、これか!そうか・・引っかかったら入ってるリストがそのまま返されて、CDRでキーを除いた部分を持ってくるって事か!ありがとうございます!
 明らか勘違いしてました(^_^;)
 assocで得られるであろうと僕が思ってたリスト(garden west door)のwest(2番目)を引数のdirectionと比較したいからcdrを使ってると思ってました(最初に発見したものを云々とも絡まっての誤解・・考えたら2番目だけ欲しいならsecondとかありますもんね)。

 そして
なんと大域環境上でis-atは丸見えなのである。つまり、is-atはローカル関数の要件を満たしていない。
これは非常に重要なdefunの性質なの。つまり、defunはSchemeのdefineと違って大域的にシンボルに関数をセットする役目を担っていて、レキシカルな意味でどこで使われようと大域の環境相手に仕事をするんだ。

 ええっ!?ちょっと驚き・・Lisp系ってこういうのにすごく厳密に作られてると思ってました(やたらとスコープの話が出るので・・いや、逆にやたらと出るってことは打ち手が気をつけないといけないという現れなのか?)。
 こういうところからもdefineに色んな役割をもたせられるSchemeは洗練されてるってことなんですかねぇ

 今日も神戸まで出張だったので電車の行き帰りで実用CommonLispを読む。まあ、途中で眠たくなってしまって記憶もおぼろげだけど。
 3.12 入力/出力でフォーマット指定の話。やっぱり異質な印象だけど一度まとめてやらんといかんな・・と思いつつ読み流す
 3.15 評価の話。funcallってそういう使い方だったのか。#'とどう違うんだよとか思ってました。evalは便利そうだな(ゲームとかの入力で)とか思ってたけどオススメされてなかったが意外。例の危険性に絡んだ話だろうか?
 3.16 クロージャーの話。以前から「環境」だとかで全然頭に入ってこなかったクロージャー。関数とレキシカル変数の対であるというが・・つまり同じ名前の関数でも別の変数を与えられたら別のクロージャーが生まれるって事なんだろうか?まあ、ちゃんと調べよう。こういうの流してきたから良くないんだよな~
 3.17 スペシャル変数の話。ふーん・・今まで意識してないけど、大域的に設定しておいて特定の関数内で自由に利用して終わったら大域的な値に勝手に戻るということなのか・・それとも大域的にはそのままの値が保存されていて局所関数で使うときにはコピーが作られて値とか変数をその場だけ利用できるということなのか・・シャドウイングについては検索してももう一つ分からんなぁ・・多分演習問題をやったら分かると思うのでとりあえずメモ
 3.19 パラメータに関する補足。キーワードはちゃんと使えればすごく便利そう・・とだけ覚えておくか!さしあたってRacketへの移植の時に出てきたらどうやって再現するかって話になってくるけどなあ

 という訳で、第二部4章のAIの話に入りました。ここらへんは普通の読書っぽいので気楽かな・・

 帰宅後はMPが枯渇していて寝てしまったのだった

2021/12/21
 ちょうど3万字になってしもーた。夜、実用commonlisp読んでるんですが
 あ、手続き(プロシージャ)って副作用をもたらす破壊的なもの(関数?)を言うんですね。分かりやすい(^o^)
 あれ、、そう言えば以前Cametan42さんが書いてくださってたような?


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

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

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