タグ

ブックマーク / knenet.hatenadiary.jp (6)

  • ウィンドウサイズを複数パターン記憶できたら便利だよね。 - 象徴ヶ淵

    ; > xyzzy の音 - バッファ/ウィンドウ/フレーム ; > http://hie.s64.xrea.com/xyzzy/note/buffer.html#xyzzy-resize ; > xyzzy Part6 212 あたりからを参考に。 ; を改造。パターン記録して呼び出す方式に。 (provide "window-resize") (in-package "editor") (require "wip/winapi") (unless (fboundp 'GetWindowRect) (c:*define-dll-entry winapi:BOOL GetWindowRect (winapi:HWND (winapi:RECT *)) "user32")) (unless (fboundp 'SetWindowPos) (c:*define-dll-entry winapi

    ウィンドウサイズを複数パターン記憶できたら便利だよね。 - 象徴ヶ淵
    youz
    youz 2011/10/05
  • Spelunkyを100回クリアした記念 - 象徴ヶ淵

    Spelunky(日語wiki)は 鞭とロープとローソク爆弾で武装した無謀なおっさんがカーリー神殿を強襲するアクションゲームである。 このゲームを今年の1月から始めて、先日100回クリアした。 記念として、感想を書いておく。 Spelunkyはアクションゲームとしては珍しく、ステージが自動生成される。 なので、ステージ構成や操作は、JumperTwoのような覚えゲーほどは難しくないものの、非常に死にやすい。 ヘビ、クモ、洞窟人といった敵は動きこそ単純だが、地形によってはダメージを受けることがあるし、矢の罠や落石などの 罠も、慣れてきたと思ってもひっかかることがある。敵からダメージを受けたり、罠にかかる確率が数%になっても、ステージ全体では100を超える敵やトラップが出現するので、その程度では簡単にはゴールにたどり着けないのだ。 そんなわけで、ショートカットを使ってクリアするのに100回前

    Spelunkyを100回クリアした記念 - 象徴ヶ淵
    youz
    youz 2011/08/11
  • クロージャの動作と展望(?) - 象徴ヶ淵

    クロージャについての言及があったので、ちょっと見解を述べてみる。 On lispに書いてある通りに説明しようとしたら、上手く動かなかった*1ので、xyzzy上で確認できたことを書く。 私がクロージャといっているのは、主にレキシカルクロージャを指している。 lexcalというのは、語彙とか辞書という意味だが、これは、定義された関数が、引数にない変数(フリー変数)を参照しているときに、実際に何を参照するべきかを関数が持っている辞書に記録していることを示している。 関数は、その関数が定義されたクロージャ内の変数を覚えている。 xyzzyでクロージャが意識されるのは、主にlet周りである。 トップレベルで定義された関数は、letで同じ名前の変数が束縛されていても、トップレベルの変数を参照する。 また、let内で定義された変数は、トップレベルや別のlet内で束縛された変数とは無関係でいられる。この場

    クロージャの動作と展望(?) - 象徴ヶ淵
  • Arcをxyzzyで。 - 象徴ヶ淵

    簡単にはこんな感じで使える。 (defmacro run-ps (proc exe cmd dir) `(setq ,proc (make-process (format nil "\"~a\" ~a" ,exe ,(if cmd cmd "")) :exec-directory ,dir))) (let ((file "MzScheme.exe")) (run-ps proc file "-m -f as.scm" (directory-namestring file))) (defun send-sexp (&optional fp) (interactive) (if (interactive-p) (send-sexp (buffer-process)) (save-excursion (process-send-string fp (buffer-substring (progn

    Arcをxyzzyで。 - 象徴ヶ淵
  • インタラクティブな引数指定。 - 象徴ヶ淵

    日にちが空いてしまったので新しいエントリで。interactiveの使い方がようやく分かってきた。xyzzyでは、関数は普通に呼び出されるときと、コマンドとして呼び出されるときがある。interactiveは、関数がコマンドとして呼び出されたときに、どういう挙動をするかを示す関数だ。最低限、関数の内部にinteractiveがないと、コマンドとして呼び出すことができない。まあ、interactiveの説明はreferenceを見ればいいのだけど、解りづらい部分があったので自分でまとめてみる。 interactiveには、コマンドとして呼び出されたときの引数を決める役割がある。引数はリストで渡す。 (defun test (&optional (arg "default") (arg2 "default")) (interactive '("interactive")) (format t

    インタラクティブな引数指定。 - 象徴ヶ淵
  • 循環リスト - 象徴ヶ淵

    xyzzy lispは広井 誠が詳しいのだけれど、循環リストは少し触れているだけだ。 もっと長い循環リストの作り方や、要素の挿入、削除の方法が書かれていない。 まあ、循環リストは不便なところがあるし、大抵は他の実装方法の方がわかりやすいので、必要ない気がしなくもない。 しかし、場所や長さを気にせずにループを扱いたいときには、お呼びがかかることもある*1。 循環リストの扱い方を説明しているところが見つからないので適当に書いて調べてみた。 まず、長い循環リストの作り方だ。 cdrでconsの最後を取り出して循環リストを作ればいいのだが、cdrはcddddrまでしか用意されていない。 そこで、nthcdrを使おうとしたのだが、これはsetfフォームに展開できないらしい。 少し悩んだが、次のようにすれば上手く行くことが判った。 (setq l '(9 8 7 6 5 4 3 2 1)) >(9 8

    循環リスト - 象徴ヶ淵
  • 1