星田さんの記事に対するコメント。
Make-posnって?座標を作る専用の関数があるのか・・それとも座標の表現に極めて便利な2つの値限定のValueって事なんだろうか?
あ、それも構造体で定義されたposn型、と言うデータ型です。
ちょっと歴史的な事情があるんでピンと来なかったかもしんない。
RacketがまだPLT Schemeと名乗ってた頃。
構造体定義はdefine-structってマクロで定義してたのね。
で、何度も書くけど、Lispにおける構造体定義、ってのは「自動で」「暗黙で」関数をいくつか定義するんだけど。
現行のstructってマクロは「構造体定義」した時点で、その時点で定義された名前を使った構造体定義用関数を自動作成する。
> (struct sample (foo bar baz)) ;; 構造体で「sample型」と言うデータ型を定義する
> (sample "hoge" "fuga" "piyo") ;; 「sample」と言う名前で実際のsample型のインスタンスを作る
#<sample>
>
ところが、往年のdefine-structの場合、実際のデータ型のインスタンスを作る場合、make-名前と言う関数を自動生成してたわけ。
> (define-struct sample (foo bar baz)) ;; 構造体で「sample型」と言うデータ型を定義する
> (make-sample "hoge" "fuga" "piyo") ;; 「make-sample」と言う名前で実際のsample型のインスタンスを作る
#<sample>
>
このライブラリで使うposnってデータ型は古いPLT Schemeのやり方で作られたブツで、結果そのせいでmake-posnって名前でデータ型生成するようになってんだわ。
ごめんね、紛らわしかったかも。
実験してみたら求められるのはlist-of-posnsって型らしい。と言うことはplace-image(s)を使うときには絶対にmake-posnを使わないといかんということか~
仕様的にはそうなってますね。
なお、「list-of-posnsって型」じゃなくって「posnsって型のリスト」です。
Append-mapの挙動も不安だったのでMapでどうなるかを・・おお、List内List。なるほどAppend-mapだとひとつづきになるか・・
そうそう。
こうなってくるとappend-mapもなかなか可愛くなってくるでしょ(笑)?
append-mapも自動flattenな関数ですね。
あと、今更なんですけどLambdaの入れ子の形をようやく意識出来ました(^_^;) この形絶対に身に着けないと!
やった!
おめでとうございます!
これも覚えておこう!
flattenはLispではかなり重要な操作です。組み込みにしてもいいくらい・・・あ、あったわ(笑)。今知った(爆)。
いずれにせよ、古典的なLispの「宿題」とか「練習問題」では割に良く出る問題ですね・・・・・・。
リスト操作でも重要な操作なんで、考え方としてはPythonでも必要なモノです。
素材集めが結構大変なんだよなぁ・・
そうなのよね。
ゲームだと、実際一番大変なのが、画像をどうするか、とか(RPGとかだと)シナリオをどうすっか、って部分なのよね。
実はそういう「プログラミングじゃない部分」に足を引っ張られる。
んでね。例えば。オープンソース界隈だと、RPGが殆どないんだけど、RPGコンストラクションセットはやたらあるんだ(笑)。つまり、プログラマの人たちは、「一番メンド臭いのはシナリオを書く事だ」って思っていて(笑)、結果「システムだけ作って」公開、ってパターンが異様に多いんだよ(笑)。
同様に、何故にいまだ古典的なRogueクローンがたくさん出てくるのか、ってのもそれが理由。だってRogueタイプならシナリオ要らないじゃん(笑)。「システムさえ作れば」ゲームになってる、ってのはプログラマ向けなのね。だからやたらRogueタイプのゲームが出てくるわけ。
ハンバーガーショップなら
- Racketの2htdp/imageライブラリで画像を自作する
- Big Macの画像でも拾ってきてGIMPで加工する
- バーガータイムから画像をパクってくる(笑)
のどれかかなぁ。
まぁ、自作なら頑張ってもらうしかないけど(笑)、Big Mac辺りの画像からGIMP使って「ファジー選択」を駆使しつつ画像を「抜いて生成していく」ってのは割に実現可能なアイディアかなぁ。
GIMPはフリーソフト版「Photoshop」って言って良いくらい高性能なんで、この際インストールしておけば色々と重宝します。
バーガータイムはアレね(笑)、懐かしのアーケードゲーム。
これから例によってGIMPで画像を「中抜きする」ってのが手なんだけど・・・・・・。
実はこのゲーム、オープンソース版のクローンがあります。
んでソースコードをダウンロードすると、src/imagesってフォルダに画像データが入ってる。全部xpmって特殊なフォーマットなんだけど、GIMP辺り使えばpngとかjpgとか言う形式に変換可能なんじゃないかしらん。
取り敢えずそれらが思いつくテかしらん。
あと、この辺はかなり苦労して理解したつもりだけで自信を持って「本当は分かってない」と言えるので、復習します!
まぁね、Pythonだと辞書型使わなきゃなんないけど、Lispだと連想リストもあるし、特にScheme標準には含まれてない機能なんで、ちょっと「身近じゃない」データ型に思うかもしれませんね。
と、ここまで。