研究開発

ステップ実行eval開発中(2)

要は、 ((eval `(,lambda (arg) arg) (interaction-environment)) 123) => 123 のように、evalに対して、マクロやspecial formの「実体」を渡した時にも、evalがそれをマクロやspecial formとして扱ってくれれば問題は解決するのだが、とりあえずGaucheはそ…

ステップ実行eval開発中(1)

とりあえず手続き類は問題無く動くようになった。 しかし、マクロとspecial formの評価時に割り込み処理を入れるのが難しい。 マクロとspecial formには割り込み処理を入れない事にすると、当初に想定していた利用方法の大半が駄目になってしまう為、この部…

ラブやん9巻を読んだ。 俺も「今晩から頑張る。」 とりあえず、「一月中に何か作る」という事にしていたのを思い出したので、適当に作った。 http://e.tir.jp/wiliki?hdn%3a%ba%ee%c0%ae%ca%aa

ステップ実行evalが欲しい

インターフェースは以下のような感じ(仮)。 (with-step-eval expr env step-num interval-proc) exprとenvは、通常のevalと同じ。 step-numに、「何ステップ分実行したらinterval-procを呼ぶか」のステップ数を設定。 「ステップ」は、例えば、(car (cons 1 …

いつのまにか、ghcのバージョンが6.8.2に上がっていたのでアップデートした。 6.8.1では正常に動かなかった各種の問題が解決されていた。 Vista対策で、*.exeを生成した時に、一緒に*.exe.manifestが生成されるようになっていた。 Vistaは、このmanifestファ…

開発環境構築手順をまとめ直した。 http://e.tir.jp/wiliki?hdn%3a%b3%ab%c8%af%b4%c4%b6%ad%b9%bd%c3%db 無駄に手間がかかった。

あれから、ghc-6.6.1でWin32モジュールをインストールしてみようとしたら、 Win32-2.1.0.0では、bytestringモジュールが必須になってる bytestringモジュールの*.cabalファイルが、1.2.*以上のCabalシステムを要求する Cabalをアップグレードする bytestring…

ghcをアップグレードしたらWin32モジュールのインストールが失敗するようになった

ghcが6.8.1になり、ChangeLogによると更なる最適化がなされているっぽいので、早速6.6.1をアンインストールし、古いモジュールも削除してから、6.8.1をインストールした。 そして、これまで通り、まずはWin32モジュールから再インストールしようとしたところ…

結論: Haskellは難易度が高い。 クソゲーが一応動くようになった。 http://e.tir.jp/wiliki?hdn%3a%ba%ee%c0%ae%ca%aa SDL-ttf使っていると何故か、ghcに「-O」で最適化を指定するとエラーが出てコンパイルできない。詳細はhdnの方に書いた。 以下は、とりと…

Haskellにもevalを。 http://www.cse.unsw.edu.au/~dons/hs-plugins/html/ http://www.cse.unsw.edu.au/~dons/hs-plugins/index.html ランタイムコンパイルをやっているっぽい?

ほぼ間違いなく、自分がHaskellの記法をちゃんと調べていないのが原因だが、タプルやデータ型を展開する時のコードが異常に冗長になって困る。 updateGK TextFeed (GiantKen {quitted = quitted ,gkvars = (GKVars {currentState = currentState ,scenarioTr…

とりあえず、テキストゲーム(要はノベルゲームっぽいの)を作ってみようという事になったが、どうにも状態を表現しづらい。 型制約に引っかかって上手く記述できない。 そして、上手く動くように記述しようと直すと、どうにも直感的な記述にならない。 特に、…

とりあえず、いきなりクォータービューにはいかずに、まずテキストゲームを作ってみる事にする。 クォータービューなゲームでも結局、文字表示は必要になる筈なので、そんな回り道という程でもない筈なので。 例によって、ゲーム内容はクソゲーとする。 と、…

本当にHaskellにeval無いか自信なかったので、検索してみたら、このスレが見付かった。 http://www.tom.sfc.keio.ac.jp/~sakai/w3ml/w3ml.cgi/haskell-jp/msg/248 最初から読んでみたけど、このスレの内容凄い面白いなあ。

なんとなくHaskellを憶えてきたので、改めてLiskellのコードを見てみた。 http://liskell.org/ http://clemens.endorphin.org/liskell 理解できる! サンプルのLiskellコードが、どういう風にHaskell風に解釈されるのか、そして、どう実行されるのかが、理解…

サーフィスの透過種別に応じて、適切にフォントレンダリングするようなモジュールを書いていたら、その組み合わせがあまりにも膨大になって、一生懸命に一つずつパターンに応じて書いていた。 しかし、よく考えたら、用途に応じて組み合わせを数種類に絞って…

SDLで、透過色を持つサーフィスをblit転送する際の挙動が、物凄いバッドノウハウっぽい

理解するのに結構な時間をかけてしまった。 まとめた。 http://e.tir.jp/wiliki?hdn%3asdl#H-1sbk6po どうも、回り道ばかりしているようで、肝心の作成がなかなか前に進まない。

日記

近況と予定: 社内でのLisp布教用に、Gauche-rfbで遊べる環境を構築してみた。 Haskell+SDLでゲーム作成 Haskellは噂通り、自分の知る静的型言語の中では最強だと感じられた。 Haskellで物を書く場合、自分が作る対象の構造について熟知している必要があるの…

クォータービュー表示ロジック(3)

検索して発見した。これはすごい。 http://d.hatena.ne.jp/yaneurao/20041002 http://d.hatena.ne.jp/yaneurao/20041003 http://d.hatena.ne.jp/yaneurao/20041006 http://d.hatena.ne.jp/yaneurao/20041007 http://d.hatena.ne.jp/yaneurao/20041008 記事が…

クォータービュー表示ロジック(2)

考えた結果、おそらく、3D系にかなり似たロジックになってきた気がする。 考えた中で最も効率が良さそうなのは、以下のロジックを使い、カメラに写るオブジェクト(=描画の為に計算が必要なオブジェクト)を絞る手法だった。 世界の全空間を、適切なサイズの立…

クォータービュー表示ロジック(1)

クォータービューは、基本的には、あらゆるオブジェクトを、カメラからの距離に応じて、遠い順に上書き描画していけば、とりあえず表示として破綻する事なく描画する事ができる(もっと効率の良い方法があるかも知れないが、模索中)。 (カメラ的)前後に当たり…

フィラデルフィア・エミュレータ脱線その一

応援団2が一通り落ち着いてきた(合計一億二千万点ぐらい)ので、またフィラデルフィア・エミュレータの続きを作る事にした。 前回作ったバージョンはそれはそれとして置いておいて、以下の改善を行う予定。 攻撃対象選択アルゴリズムの洗練。 選択肢(誰を攻撃…

「背徳的なものまね鳥」が分かりやすい。 http://d.hatena.ne.jp/propella/20070426/p1

Gauche-rfbがヤバイ

gauche.nightで小黒さんによってデモが行われ、会場を大いに沸かせたGauche-rfbのパッケージが公開されたのでいじってみた。 rfb-initを:portキーワード付きで実行すると簡易ウェブサーバが起動するので、適当な番号を指定する(※インターネットに接続してい…

shebangを使ったスクリプトインタープリタ実行時の引数

結論: getoptだとshebang引数が上手く取れないから、自前でparseした。 /path/to/interpという、Cで書かれたスクリプトインタープリタを自分で書いたとする。 そして、 #!/path/to/interp --aaa=bbb --ccc=ddd -e ... ... ...というファイル「opt.interp」が…

バックトラックポイントの生成をマクロ化してみた

さっきの文章を書いていて、この用途で使うcall/ccを汎用化できそうな気がしてみたので、ちょっとマクロ化してみた。 let1とlet/cc使ってるのでgauche用だが、そこを展開すれば他のschemeでも使えると思う。 (define-syntax backtrack-point/values (syntax-…

継続による時間操作まとめ

前回までのフィラデルフィア・エミュレータ作りで考えた事の要約。 まだ考え途中。 以下の文章で使っている「call/cc」は、よくあるgotoやreturnの用途で使うcall/ccではなく、 (call/cc (lambda (cont) ... ... ...)) xxx xxx xxx の、「...」の外側(「xxx…

継続による時間操作とフィラデルフィア・エミュレータ(4)

ちょっとコードを考え直してみたが、完全にcps変換してしまわない限り、closure-ambは使えない事に気付いた(手続きの呼び出しで戻ってしまうと、amb状態が戻されてしまう為)。 どうするか。 部分継続を使えば何とかなるかも知れない。しかし、駄目かも知れな…

継続による時間操作とフィラデルフィア・エミュレータ(3)

要約: フィラデルフィア演義の戦闘エミュレータが、とりあえず動くようになった。

継続による時間操作とフィラデルフィア・エミュレータ(2)

要約: 副作用無し(と言うにはかなり怪しいが)で実装されたambを二種類、作った。