星田オステオパシー

プログラミング「学習」日記 2022/05/31〜

2022/06/20

 組み合わせについてCametanさんが解説のために骨を折ってくださったのでしたm(_ _)m いっつもすいません、ありがとうございます!

 Cametanさんの順列についての記事をちゃんと読んでなかったので腰を据えて拝見する。Append-mapじゃなくてmapだったらどうなるのか?とチェック。なるほど〜・・組み合わせよりもこちらを先に拝見するべきだったな。CDRじゃなくてRemoveでx頭部分を抜いたリストを与えるか、なるほど〜




 ((< (length xs) r) '(())) ってなんで要るの?と実験。エラー対策という事かな?
 遅延評価版も打ち込んで読んでたけど、考えたらちょっと前に物理の話でStreamとか遅延評価の学習をしようと思って放置になってたので明日ちゃんと読んでみようと。

 その後、以前にCametanさんがPython用に書かれていたCPSの解説を拝見。18日の分で書いてた疑問とか既にちゃんと解説されてた(^_^;) 
 どのように書くのかってことで詳細に解説されてるのを拝見して、ああ、REPLの時のWorld、環境みたいな感じかな?と。うーん違うかな?あれは構造体だったけどLambdaを使って関数ごと環境として放り込んだみたいな?書き方の手順がこれでもかと丁寧に書かれていたので、もう後は形で覚えよう。



2022/06/19
 宿直時間でLinuxPCを持ち込んで続きをやるか!と思ってたけど、なんか異常な体調不良に襲われた。掃除が終わったタイミングで、めまい、頭痛、吐き気・・宿直が楽勝バイトで助かった。翌日まで唸りながら寝転がっててようやく立ち直る。
 一体何だったのか・・

2022/06/16
 Gooブログあるあるじゃないかと思うんですがフォローしてる人の通知が遅れて、その次の記事(最新の記事)にしか気づかない・・ってありますよね?

 Cametanさんからのリアクションも昨夜過去記事を漁っていて気づきました。逆に気を使わせてしまった・・僕、気を使わせる達人なんで(^_^;)

 ようやくmapのCPS版の話題に戻る事に。正直言って継続渡しについて曖昧だったのが間を開けることで更にボンヤリしたものに。まあ、とりあえず普通再帰版と並べてみてみよう。

 実験してみたかったけどkに当たる部分にどんな引数を持ってきたら良いのかも分からないw。Procなのでそのまま返すLambdaで? おお・・


 じゃあkに更に1を足すProcを持ってきたら足された数字が・・来てない!


 mapnの方も同じか・・。本体内でもLamabda(x) x)が使われてるから、とりあえず継続渡しで末尾再帰をする時に定番の書き方なのか?と推測。

 とりあえず宿題の名前付きLetに挑戦するか・・。驚いたことにすっかり忘れていたのでw コレクションを見返して思い出す。ま、こっちは正直すんなり書けた・・あ!

 こうでしたね(^o^) で、やっぱり問題はmapnですよ。

 複数のLambdaとkで僕の短期メモリは枯渇したのでありました。という訳で、数時間あーでもないこーでもない。
 返り値としては(1 3)(2 2)(3 1)ってのが欲しいんですよね。そしたらApplyで・・って感じなのに。


 と、思ったらMap1で返ってくるじゃないか! 
 いつも Map1 add1 '(1 2 3 4) とかしか試してなかったから気づかなかった。これが出来るなら・・


 定番の形で書けるじゃな〜い

 あ、`記法の練習と。本体はCase-lambdaでまとめてるだけだからここまでで良いのでは?と。しかし・・・

 見比べてみるとほとんど解答まんまの状態だったんですね(^_^;) 
 継続渡しと継続の学習、続けます〜。

 残った謎は継続渡しで渡す方?のk部分の引数ProcがLmabdaだったら何でも通って、しかもどんな内容でも受け渡し先に影響が出ないってのが謎でした。


2022/06/15
 Cametanさんが再帰による組み合わせに関して記事を書いてくださった。ありがとうございます!

 まずいきなり


 ↑ここでムチャクチャ救われた気がした。ここまで考えて理解できないとかヤバない?とか思ってましたので(^_^;)
 まだちゃんと理解できたとは言えないけど、とりあえず「教養」として覚えておくように、そしていつか「ああ・・なるほどね」ってな感じで理解できるようになるかもと期待して一定期間ごとに見直してみるとします。
 しかしパスカルの三角の応用だったとは・・だから組み合わせの途中でいきなり登場してたのか!(悟り) いや、突然変なのぶっこんでくるなぁ・・とは思ったんですよ(Junk scriptsのまとめページには解説などは無くてコードが列挙されているだけなのだ!)。まさかヒントになってたとは・・

 ところで・・
 参照元のお気楽さんの解説ページを拝見すると・・あっ・・ちゃんと公式出てました。いや、だからって全然理解できてませんでしたけどね。しかし再帰って不思議ですね・・分かった上でコードを見返しても、なんでこんな単純な表記で組み合わせの生成が出来るのか不思議に思ってしまう。
 上の公式で「組み合わせの数」が出るのは分かるんですが、それをちょっと改変してコードに落とし込んだら組み合わせそのモノが全部出てくるとは・・・。
 公式のnとrとコード内を見比べてみるとコード内のnは公式のr、コードのcdrが公式の(n-1)に対応してますよね?ひょっとして他の数学的スクリプトでも同じように計算のタイミングに合わせて出力させたりする事が出来るってことなんでしょうかね。

 僕が悩んでたコッチなんて、もっと不思議な感じがする。スッキリし過ぎだろ!と。


 なるほどぉ・・・高校の時100点満点で4点とか取ったことありますからねぇ・・。数学、やりなおしの続きやっていきます(^o^)


 あと、テスト駆動開発の記事で紹介してくださっていたお茶の水女子大学の動画をまだ2本だけですけど拝見しました。デザインレシピ良さそうですね!まさしく僕が「うーん、こんな感じかなぁ」って曖昧に書き始めてましたから。


2022/06/14
 睡眠を取ったのでどこが分からないのかを観念して書いてゆこう!


 アルゴリズムの基本的なところは分かるんですよね。abcdeとあって、aを頭として抜いておいて、bcdeから2つ選ぶ。で、bを選んだらcdeから1つ選ぶ。これでaを含む分は出るので、次はb以下で再帰と。


 要するにコードの挙動が分からないんですよね・・。
 こういう感じで悩んでます。ちょっと説明がうまくいくかどうか分からないのですが・・rがゼロになった場合に'(())が返る。するとどうも次のサブルーチンと言うのかリストxsをcdrで進む。そこでもrがゼロになるまで、つまり3つ選ぶまで動いているうちにリストxsが空になって'()が返ったところで確定して行くように思うんだけど、返ってた'(())はどこに行ったのか?

 appendとconsが混じっててtraceで出てくる形になるためにはどういう処理がされてるのかが謎で実験をする。'()の次に来てる'((e))みたいな形にするためには一番上のmapでconsパターンなのか? その形同士でappendを行った場合は一応望む形(3番目)の((c)(d))になる・・が?ここがappendなのかconsなのか・・。


 ところが困った?ことに'()に'(d)をconsしても'((d))の形になる。そこに'(c)をconsするとこれまた'((c)(d))という望んだ形になってしまう。
 

 ここがappendだと思う、さすがに。

 気になるのはここの動作。CONSは抜いてた先頭を入れるためだから、ここはappendじゃないといけないと思うけど・・もしかしてmapでのcons適用の経過部分ってtraceで出てこないでいきなり表示されるとか?

 特にこの終盤の展開が・・(^_^;) とりあえず判明したことは、再帰の入れ子がむちゃくちゃ苦手ということでしょうか。trace見てもトレースできないという・・。あ、なんか分かりそう・・と思ったら分かってない!の繰り返しでありました。

 今後取りうるオプションは
1:もうちょっと粘る
2:とりあえず置いといて未来の自分に期待する
3:再帰の入れ子のオススメ学習方法を教えてもらう(他力)

 って感じでしょうか。何かが決定的に抜け落ちてるんでしょうかねぇ・・
 Cametanさん、1~3のどれが良いと思われます?(^_^;) 
 そもそもこーゆー基本的なところにこだわって行くのが良いのか、それともバンバン進んじゃうというのが良いのかも悩みどころなんですよね・・ネットだと両論並立って感じですし


(define (combination r xs)
(cond
((zero? r) '(()))
((null? xs) '())
(else
(append (map (lambda (ys)
(cons (car xs) ys))
(combination (- r 1) (cdr xs)))
(combination r (cdr xs))))))




2022/06/13
 お手上げだ~!

 この組み合わせの生成なんですけど!

 なんかもう10時間くらい考え続けているw
 なんでこんなに思考がどうどう巡りをするのか・・やっぱり再帰の理解で抜け落ちている部分があると思わます
 アルゴリズムの元になってる考え方は分かる(多分)。

 もうここでギブアップしようと思ったのだけど、もうちょっとだけ・・と、これを書いたのが17時だったのですが、また気が変わって24時45分、まだニラメッコしているのでありました。分かりそう・・あ、やっぱり違うか~の繰り返し。一応生存報告でした(^o^)



2022/06/10

 バイトと宿直(バイト)で時間が無かったのでとりあえず「組み合わせの生成」を打ち込んで挙動を見る・・うう・・なんだこれはw。懐かしい2chのアスキーアートみたいだぁ。明日は予定も無いのでじっくり動きを追ってみるか〜



2022/06/09
 組み合わせか・・とりあえず適当に数字を入れて・・1?

 自分でも何をしてるのか分かってないので勉強サイトを見る。あ、そういう話か・・。ところでこのページの(多分中学受験)例題が面白かった。まあ、いつかそのうち・・


 これは公式をそのまま打ち込んだだけって感じ・・かと思ったけど再帰でうまいこと書かれてるな?という感じですか。名前付きLetでもっと簡単にかけそうな気がするんだけどなぁ・・明日書いてみよう。



 続きまして、パスカルの三角。これはなかなか苦戦しましたよ〜(しかも読み解くだけで)。そもそもパスカルの三角って何?ってところからスタートですから。

 パスカルの三角は分かったけど、このコードが何をしようとしてるのかが分からない。とにかく返り値をチェックしてみる。まあ、これは問題なし


 ん〜?なんだこれは?


 ん?これは・・このxとyにmapでプラスするとたしかに14641になる、あ、桁をスライドさせるためにyの先頭に0くっつけてんのか!散々悩んだよ!(数時間)。しかしそうなると・・・


 この(cons 1 (...ってところは何なんだ?毎回aに最初に積まれてるのでケツの1をこれで足してるってこと?ということはmapでの足し算はyの最後はxのペアが無いので無視されているという事か。
 じゃあcons 1とかしなくても

 xの方にもケツに0を足してペアの数を揃えたら?と思ったら成功した。やったぜ!これでスッキリ眠れる!

 次回予告:次回いよいよJunk scriptsのラスト組み合わせの生成。これが終わったらCametanさんの宿題に取りかかれるな。
 今週に入った辺りから例のサイトをKindleに送る「Send to kindel」のサービスが落ちてしまってる。いつまでこの状態か分からないので久々にiPhoneに充電してアプリ版Kindleを使ってmobi化。回数制限も無いし無料だしで言うこと無いなぁ。ただ、古いアンドロイドスマホをWIFI専用のサブで持ち歩いてるので、それが壊れるまでは持ち歩きにはちょっとなぁ・・

 マイクロソフトが自動化ソフトの解説書籍を無料で配っているということで3冊ともDL。え?Win10に最初から入っているのか・・最近はノーコードものとか広がりつつあるけど、その流れかねぇ?まあけどやっぱりコード書けてなんぼじゃなかろうか?それに自動化って言ってもなぁ・・エロ動画の僕の好みのシチュエーションを自動で編集してくれるとか、ネットから好みの(エロ)画像を自動で収集してくれるとか、そういう話じゃないんでしょう?
 ま、使ってみるけどね!


2022/06/08

 バイトの移動中にN市の図書館を通るのでトイレのついでに毎回寄るようにしてます。
 Rubyのまつもとさんのお名前があったのでちょっと借りてみました。とにかく出来る限りプログラミングに関連する物事に触れ続けようということで。

 で、Racketで学習の続きです。
 止まらなくなったのでもっと数を減らして実行。なるほど、リストの中から3つをnこ選んで順列を作るってことか3*2*1で6個やな。なるほど前回止まらなかったわけだw 10*9*8*7*6*5で151200個とか


 二重mapの挙動がアヤフヤだったので実験(今更)。FoldLの時もそうだったけどちょっと要注意やな・・


 ついでにアヤフヤだったFlatmapも実験。ん〜1段階カッコを外すのか。Flattenと違うのか?と思って調べたらFlattenはちょっと見た感じカッコ全外しという感じかな?帰宅してから実験しよう(図書館で書いてます)。

 で、味をしめたのでTraceで確認。


 いや〜Selectでの事があったのでちょっとはマシだったけど、またしても脳の短期記憶の少なさを思い知らされましたよ〜(^_^;) 早く脳にメモリをぶっ刺して拡張する実験に成功してほしい。まあ、そうなったらこういう学習とか無意味になるんだろうけど。なんとか変数は追えるようになったか。

 次回、組み合わせです。この辺で数学は引っかかってるのでちょっと注意しながら進もう・・え?数学じゃなくて算数!?ガーン!




2022/06/07
 Cametanさんがソートについてコメントと参考コードを紹介してくださっていた。ありがとうございます(^o^) なるほど教養程度でエエと・・けど今回コードの読み取りをしてて理解できてなかったところとか明らかになったりしたので・・また読み解きすると思います。

 フォン・ノイマン!?そう聞くと更にエレガントに思えてきますねぇ!

 では続きです。

 (自動で)選んだものをリストの先頭に持ってきて残りは後ろにくっつけるというSelect関数。ここでいきなり躓きまして(^_^;) 停止条件後のList (cons z '())ってどういう事!?と。出力と辻褄が合わない・・ように思える

 試しに定数にしてみる。え・・?先頭は分かるけどケツに8ってなんで?


list cons の部分を'()だけにしてみたら最後の行ごと消滅してしまった・・って事は変数zにh a b c d e f gまで入ってるってこと?んなわけないのに・・


 そっすねLambdaのysであるSelect zsの意味が働きが分かってないんですね!

 ちょっと出力される数が多すぎて短期記憶の容量が追いつかないので減らしてみる。出力の結果から逆算してどういうプロセスが行われてるのかを考えないと無理だコレは・・しかしやっぱりこのコードでなんでこうなるのかが分からない。デバッグモードで見てもピンとこないし・・あ!そう言えばCametanさんに教わったTraceがあったな、と


 ・・・(数時間にらめっこ) あ、分かったかも。再帰で食われていって停止条件の時にケツにzと'()がセットされたところから遡ってLambdaの本体がそのままの形で適用されて行ってる。え・・?もしかして今までずっとこれが分かって無いのに再帰使ってたのか・・いやこれはちょっとマズいぞ・・今回Lambdaの引数にCDRで関数ごと再帰する形だったから明らかになったのか?とにかく他の再帰のも見直してみよう。

 今まで数学とか曖昧のまま済ませる事で躓いてきたのでプログラミングではキッチリやっていこう、趣味なんだから。間違ってたら動かないってイイっすね!

 次回予告:いよいよ順列作成の本体。

 うわぁ!試しに引数を適当に入れたら止まらなくなってしまった!



2022/06/06

 で、マージソートをやっていくんだけど・・これがなかなか難しいねんな・・コードを見ればアルゴリズムが分かるんでは?とか言うのは甘い考えでした(^_^;)


 で、wikiでGIFアニメで考え方が説明されてて納得。なるほど!これこそ一目瞭然ってヤツだな


 ただコードの方はちょっと動きが違う模様。しかしよく考えるなぁ・・


 変数の動きをコメントでメモしながら・・短期記憶能力が足りなさすぎてこうしないと理解できん(^_^;) すぐ蒸発するんだよなぁ。とりあえずこのままコレクションしておいて、定期的に見返して・・いずれは自分でも書けるようになろう。

  続きまして順列の生成。これが終わったらとりあえずお気楽さんのスクリプトは終わりかな?(と、思ってたのですが)
 まずは前提Procと思われるSelect関数・・・は? なんでこうなるの?
 と、謎を残しつつ時間切れで就寝。一晩寝たら理解できるようになってたりとか・・しないかなぁ。

 明日に続きます

 次回予告!苦労の末、理解できました!


2022/06/05
 結論:まる一日かけてXubuntuからAntiXって言うLinuxの別ディストリビューションに鞍替えしました。超キビキビです!

 経緯:いや、もう大変でしたよ〜(^_^;) 我が家のCeleronPCなんですけどXubuntuでもちょっとモタつくんですよね・・特に日本語の変換で一瞬躓くような手応えだったりして。Racketの起動なんかはWin10時代と比べると半分以下の時間だったりして爆速なんですけど・・。
 そこでネットを探って折角なので「最軽量ディストリビューション」ってのを探したところAntiXって言うので決まり!だと言う。普通に入れると日本語環境を作るのも大変なちょっと特殊な作りらしいんですけど、最初から日本語環境を入れた状態でISOイメージを公開してくださってる方がいるらしくて導入を決意。
 ところがコレが・・想像以上のお転婆だったわけですな〜。インストール自体は問題なかったんですがAntiXのデスクトップ環境が「IceWM」「Flubox」「JWM」「Herbstluftwm」とか言う聞いたことの無い面々。ドックが無かったりそもそも日本語が文字化けで見れなかったりデスクトップが全部ボックス+テキストとか言う変態仕様だったり・・相当難渋して(日本語の情報がほぼ皆無)試行錯誤の結果、IceWM+Roxってのがかろうじてドック代わりのパネルを設定出来るってことで採用・・と思ったら、起動する度にRoxがオフになってて(ちょっとした手間とは言え)毎回設定しないといけないという・・許せん!

 じゃあ他のデスクトップはインストール出来ないのか?と言うと一応アプリのインストール候補にはGnomeとかXfceとかあるんですけど、途中で止まってインストールが完了しない。唯一Xfceのライト版だけはエラーを出しながらも入ったので、そっちを使おうかと思ったら権限の問題でシャットダウンと再起動ボタンが押せない状態。ここからRootを取るのにどうしたら良いのかと調べたけど、結果から言うと不可能。
 電源問題さえ解決できれば・・いやIceWMも毎回の手間を惜しまなければ使うのはEmacsとRacket、そしてバイトの報告用にエクセルファイルをGmilで送るだけだから・・と思ったらGoogleの嫌がらせでChromeクローンでは同期が出来ない、FirefoxではGmailにアクセスできない、ChromeのLinux用はAntiXがi386マシンだと判定されてインストール出来ない、外付けUSBは刺した時に出るファイルマネージャーを閉じてしまうと刺し直しでないとアクセスする方法が無いなどなど・・・仕事が終わったのが24時半で、そこから続きをやって朝の4時までかかっても堂々めぐりが終わらないというね・・。

 最終的にGmailはChromiumでサインインは出来て(同期とかChromeそのものへのサインインは無理)、たまたまヤケクソで電源ボタンをチョイ押し(スリープ機能を確かめようとした)してみたところ、何故かCLI画面になってログアウト→自動で電源オフというどうやらちゃんとした手続きで切れると判明して決断、Xfce!君に決めた!

 まとめると
 ・よっぽどの低スペで無い限り「AntiX」はやめておくべきでは?
 ・「LiveCD」さんの所で日本語化されたイメージをいただこう
 ・デスクトップはXfce(不完全)で我慢する
 ・AntiXに付属のスクリーンショットはクソ仕様なので追加でXfceのスクショアプリを入れるべき
 ・けど動作は超快適

 って感じでした。あ〜疲れた。あ、インストールの待ち時間を利用して「闘うプログラマー」読了しました。感動した!同時にLinuxはこんなにも派生ディストリビューションが出まくったりしないで力が結集されてたらとんでもないレベルのOSになってたんじゃないかなぁと思ったりしました。


2022/06/04
 宿直先でマージソートの学習をする。打ってる時にはnの役割が謎だったけど、なるほどリストのn番目までの数字をソートすると・・どういうシチュエーションで必要なのか分からないけどw とりあえず動きを追う。
 ちょっと(今の僕には)ややこしいし、とりあえず今日は予習ということにしておくか・・。次の日に見返してみるとスンナリってのはよくあるパターンなので。明日明後日は結構時間があるので楽しみだ!

 後は・・闘うプログラマーを読んでて出てくる人の中で興味を惹かれた人をちょっと検索してみたりとか。そしたらこんなのを見つけて、また気になることが増えてしまった。おいおい・・ずっと楽しめるよコレは


2022/06/03
 まずは昨日どうも納得できてなかったFoldの再定義の件。こちらFoldl、引数の逆転があって

 こちら再定義版を使ったDrop。引数は直感通りの並びでないと駄目、というかこっちの方が便利かな?Cametanに教えていただいた新しい(?)lambdaの可変長引数の一件が絡んでいそう(宿題やります!)。ん?じゃあSRFI1のFoldはどうなんだ?

 やっぱりSRFI1版も引数は逆転パターンでした。スッキリした!


 じゃあようやく本日のメイン、ソートに入っていきましょうか・・と。まずは挿入ソートを作るための前提Proc。ん?(((null? xs)(list x))ってどういうこっちゃ?

 コメントアウトしても動く。停止条件では無い?

 あ、リスト内と比較してどれよりもデカかった場合にケツにつけるということか!と言うかですね・・まだ返り値のことをちゃんと理解してなかった(^_^;)
 Cons内で再帰してたらConsで積み上がったリストが返るのか!こんな基本的な事も曖昧だったなんて・・

 という訳でコメントだらけにしてコレクションに追加しました

 ようやく本体。と言うか本体はinsert-elementやな。再帰で回すためのガワ。なるほどねぇ・・ソートってプログラムって感じしますね!

 述語を条件に使ってのリスト分割。多値の復習になった・・ってエエっ!?どこに再帰入れてんの・・いや〜驚きました。けど、多値で返す場合めちゃ使えそうですね!覚えておかないと。と言うか普通のLetでも使えるんかな・・今度試してみよう。

 クイックソート。これは読み解くのに難儀しましたわ〜。あれ?ここでもLet-values内で再帰してるけど・・これって実はデフォルトだったりするんか?
 これは何回も同じような形で書いてみないと身につかないな・・


 乗ってきたのでちょっとだけ続きを・・。別のソートの前提条件なのかも知れないけどこれ単体だったら別に・・って感じやな?返り値がConsなんで積み上がっていってるパターンてだけ意識しておけばオッケイかなぁ


 あと、まだ手を出すつもりは無かったのだけどDiscoverの記事で「これしかない」とライターの人が推していた本があって、軽く読んでみるか・・と予約したら交野市の図書館で買ってくれた模様。やったぜ!これで今後は読み放題や。交野市の図書館は最近プログラミング系の書籍に力を入れてくれてるみたいで嬉しい。市役所ではXubuntuを使ってるって言うしやりますねぇ!


2022/06/02

 「闘うプログラマー」を読み進める。いよいよNT開発も佳境か・・いろんな才能が結集して、それでものたうち回りながら進められてたんだなぁ。しかし0と1、この2つを組み合わせて行った先にOSみたいな巨大プログラムが出来上がって行くってのは本当に魔術めいてますね・・超ひも理論が本当だとしたら紐が振動してるかしてないかの2つの状態が組み合わさって、この宇宙が出来てるってことなわけだ(よね?)から、見事な相似になってますね。どうしようもないエヴァ新劇場版:Qで唯一「ハッ」としたカヲル君がシンジ君とのピアノ連弾で発した言葉「二人ってすごいね!」は・・確かに!

 じゃあ今日も手を動かして行きましょう。
 まずはRemoveの再定義。次の高階関数で使うための下準備ですね。分かりやすい形


 今日はFoldの再定義。そのための前提としてのFold-n。Mapの再定義と同じパターンで作るもよう。



 中身を見て計算の過程が気になる。えっ・・もしもこれが本来の定義と一緒なんだったら計算の流れが想像とは違ってた。単純に1+2+3+4+5+・・となってると思ってたなぁ


 で、本体。ふんふん・・けど本当にFoldと同じ働きをするのか気になる。前にCametanさんが書いてはったFoldLの定義ってこんなんじゃなかった気がする


 これがSRFIのFoldで・・・ 

 これ・・やっぱり同じじゃないよなぁ。ま、良いか(^_^;) 厳密な定義を再現するとかが目的でもないしな・・。ちょっと後でCametanさんに引数の逆転の一件で示してもらった定義を探してみよう。

 次はいよいよソートに突入。手強そうだなぁ・・と予想してましたけど・・予感的中。そもそもアルゴリズムが分かってないしね!まあでもコードを読み解くことでアルゴリズムの勉強にもなって一石二鳥かも?と進める事にする。
 

2022/05/31
今日から高階関数の再定義を・・まずは結果から。今日はMap
 多分、こういう感じの解釈で合ってるかな?と。いや、初っ端から理解に苦労しました。いわゆる普通のMapの前提になる関数があって利用されてるとか書かれてないから、てっきり「ああ、この世にはMap-1とかMap-nとかあるんだろうな」とか考えてよく読んでなかったもんですから・・

 あ、ちなみに今回いつものRacketとカラーリングが違うぞ!と気づいた人もいるでしょう。いつもWin7マシンのRacketでやってるんだけどXubuntuも使おう!と。そして折角なのでマシンごとに色も変えたい。定数は黄色、文字列は緑とかあるんですが今回は定義だけなので出番がね。さて、気になるモチーフは・・・
 フルメタル・パニックの主役ロボット「アーバレスト」です。ほら、ラムダドライバ搭載マシンなんで・・あれ?なんか色合いが違うなw

 ではオマケの試行錯誤の記録です
 まずここでMap1の役割を誤解してるのがイタかった。単に一つのリストに対してProcを適用してリストで返す、簡易版のMapだと思ってた。

 続いて謎の関数「Map-n」。Map1もそうだけど実行例が出てないのでどういう形の引数を取るのかも分からなくて狼狽する。まあ、独立して使うものでは無いので当たり前なんですけどね

 いわゆるMap。まずこの . argってのが謎でした。どっかで見たことあるんだけどなぁ・・とかw。デバッグモードで観察したところ可変長と言うか任意というか・・複数の引数を取れる書式と判断

 Map-nの読み込み可能なリストの形が判明


 Map1の段階でこの形になってないといけないのに・・?と言うところでようやくMap1の解釈が間違っていた事に気づく。

 OK,OK!ようやく理解した。なるほどね!

 というわけで初っ端から苦戦してしまったのでした(^_^;) 


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

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

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