2009-01-01から1年間の記事一覧

確率変数と分布関数

確率について、欲しい情報を集めているサイトが見つからないので、軽くまとめてみる。 分布関数とは、ある集合に含まれる値(標本)の分布を表す関数である。集合が無限で、標本が連続した値を取る場合、分布ではなく分布密度で表すことになるが、これは有限集…

エラー。

珍しくエラーを吐いたのでメモ。 (defun xn () (let ((tb (make-hash-table))) (dotimes (a 10000 tb) ; (do-events) ;これが必要。 (let* ((p (f)) (n (gethash p tb))) (setf (gethash p tb) (if n (1+ n) 1)))))) (defun f () (let ((p 0)) (dotimes (- 2…

速度分布に応じた乱数生成

マクスウェルの速度分布は、定数を省略すると次のような形になる。 正規分布と比較すると、少し数値が大きい部分にせり出していて、平均に対して左右非対称である。ゲームでは正規分布に近い乱数を使うことが多いが、クリティカルボーナス(ある数値以上なら…

format慣らし。

「息吹」の辞書を、JIS X 208を止めて、頻度を元にして並び替えることにした。2打鍵字とは独立して、3打鍵字と4打鍵字を頻度を元に選択する。選択するのは良いのだが、これを辞書の形式に合わせて 亜唖阿哀愛挨逢葵茜悪握旭芦鯵梓圧扱宛姐飴絢綾鮎或粟安…

漢字直接入力「息吹」

文字を1文字辺り平均何打鍵で打てるかは、その文字の情報量から求めることが出来る。情報量のbit数を求めて、基数を使うキーの数に置き換えれば良い。これは、最初からその基数で情報量を求めるのと等しいので、その方法で情報量を求めると、次の通りになる…

ぼくの考えた最高のキーボード

スイッチはノータクタイルのリニア、もしくはそれに近い打鍵感。押し込み途中、20g程度で反応すると良い。 キーがフレームでホールドされ、グラグラしないこと。埃が入る隙間は必要ない。 スペースは短く、ホームポジション親指で無理なく無変換、変換、カナ…

漢字直接入力 再考

去年の始めに作った「はぶき」は、結局習得せずに放置してしまったので、改めて作り直したい。 今回は、それ以降に作った解析用の関数があり、より大規模なデータがあるので配列を再検討する。ついったーのタイムラインを1年分ほど貯めているので、その本文…

htmlを書く。

htmlはS式と同じ構造をしており、構造上の相互変換は容易に行え、さまざまなスクリプトが公開されている。 しかし、htmlのS式での表現方法はいくつかバリエーションが考えられるので、それらのスクリプトから希望する表現を探すより、自分で書いた方が早い。…

proxomitronのフィルタ

微妙に面倒なので置いておきますね。(参考 小野マトペ on Twitter: "アダルトフィルタで引っかかった単語を全て「お母さん」に置換するという恐ろしいアイデアを思いついたが、本気でダメージがでかそうなのでやらないでおく。" #ふぁぼったーの検閲に検閲…

オブジェクトっぽく書きたい!

javascriptでは変数に対するメソッドを 変数.メソッド で指定できる。メソッドを定義するのは面倒だが、今回はメソッドにこだわる必要はなく、関数でよい。このような書式の方がデータが見やすくなるので、lispでも使えたら便利だろうと思う。 ; オブジェク…

真偽値列

HSPにはカーソルなどの入力を受け付けるための命令があって、HSPを使い始めたら、まずこれに親しむことだろう*1。 ; loopとかは割愛 stick a if a&1 :gosub *left_routine if a&2 :gosub *up_routine if a&4 :gosub *right_routine if a&8 :gosub *down_rout…

マクロの動作(2)

(defmacro m7 (n) (+ n 1)) (m7 -15) | -14 (macroexpand'(m7 -15)) | -14 ;展開時に縮約されている。 (defmacro ms1 (macro) `(macroexpand'(,macro -15))) (macroexpand'(ms1 m7)) | (macroexpand '(m7 -15)) ;たるいので適当なマクロを導入 (defmacro m8 …

マクロの動作(1)

(defmacro m1 () (1+ 1)) (m1) | 2 (macroexpand'(m1)) | 2 ;展開時に評価される。 (defmacro m2 () '(1+ 1)) (m2) | 2 (macroexpand'(m2)) | (1+ 1) ;これが実行時に評価される。 ;参考 'hoge = (quote hoge) | hoge (defmacro m3 () ''(1+ 1)) (m3) | (1+ …

マクロに現れるprogn

気になるけど、気にするだけ無駄なんだよね。ということの確認。 (defmacro nprogn (num &rest body) (nprogn-f (1- num) `(progn ,@body))) (defun nprogn-f (num body) (if (plusp num) (list 'let nil (nprogn-f (1- num) body)) body)) (macroexpand '(n…

deform

let* let labels macrolet は使用頻度が高く、組み合わせて使うことも多い。すると、必然的に入れ子になり、自然にインデントを行うとインデント量が大きくなる。これは見づらいということで、入れ子を解消する書き方を考えてみた。 これらの関数(マクロ、…

closed-let

letで束縛された変数は外からは見えないが、関数を介してアクセスすることが出来る。定義されたときの変数を参照するのがレキシカルクロージャの特徴である。 (defun f1 () (let ((foo 100)) (values (lambda (n) (+ foo n)) (* foo foo)))) (f1) | #<lexical-closure: (anonymous)> 10000 </lexical-closure:>…

リージョンコマンド

リージョンに関するコマンドは色々ある。それらはばらばら、ってわけでもないが、色々なキーにちりばめてバインドされている。バインドされてないものもある。ここでもキーが足りない! と思うわけで、リージョン操作を一手に引き受けるコマンドを作ろう。 …

もっと便利なマーカが欲しい。

標準のマーカは各バッファに1つずつついてるのだが、現在の位置に他の位置からコピペしたいときは結構面倒くさい。コピーにマーカを使ってしまうため、セレクションを使うか、自力で戻らなくてはならない。グローバルマーカやレジスタもあるが、妙に使い勝手…

子を生むクロージャ

LOLでlabelsを使ったクロージャが紹介されている(On Lispから借りている)。ごく簡単に端折って書くと (defun f1 () (labels ((foo () 'bar)) #'foo)) (f1) | #<lexical-closure: (anonymous)> このようにlabelsで定義した関数を取り出すことができる。これはlabels内で定義された他の関数も</lexical-closure:>…

LET OVER LAMBDA

http://book.akahoshitakuya.com/があるので書評タグは意味がなくなってきた気がするが、今後無断*1で引用するので載せておく。LET OVER LAMBDA Edition 1.0作者: ダグホイト,Doug Hoyte,タイムインターメディアHOPプロジェクト出版社/メーカー: エスアイビ…

syleraへの回帰

syleraの更新が止まってからfirefox3を使っていた。更新が止まったものを使い続けるのはどうかと思っていたからだ。ところが、firefoxは遅いし不便である。syleraはoperaと同じ程度には表示が速く、それに慣れているとイライラさせられる。ならoperaにすれば…

普通のタイマー

xyzzyにはタイマー機能がある。javascriptのsetInterval()と同じようなもので、次のように書ける。 ;一回のみ (start-timer 1 'ding t) ;繰り返し (progn (start-timer 0.5 'ding) (start-timer 0.6 'ding) (start-timer 0.7 'ding) (start-timer 0.8 'ding)…

執拗な再帰マクロ展開

処理系に依るかも知れないが、macroexpandは全てのマクロを展開してくれない。 (defmacro macro (&body body) `(progn (foo) ,@body (bar))) (defmacro macro2 (&body body) `(prog1 ,@body (buzz))) (defmacro macro3 () ''fizz) (macroexpand '(macro (mac…

関数の挙動を調べたい

xyzzyにはデバッグのためにstack-traceとstepが用意されている。ところが、これらの関数・マクロの使い方がよくわからない。 (stack-trace) >CALL STACK 9: (stack-trace) >CALL STACK 8: (eval (stack-trace)) >CALL STACK 7: (system:*byte-code ...) >CAL…

nthcdrとsubseq

nthcdrはn番目のcdrであり、subseqはfromからtoまでのシーケンスを取る。このsubseqをfromだけ指定してリストに適用すると、nthcdrと同じような結果が得られる。 (setq x (list 1 2 3 4 5 6 7 8 9 10)) (nthcdr 3 x) | (4 5 6 7 8 9 10) (subseq x 3) | (4 5…

ファイル毎にバッファの色を変更する

前からそのようなスクリプトを使っていたのだが、set-buffer-colorsはベクタで指定するため、変更したいところの前に変更したくない箇所があっても、配列を埋める必要があって面倒だった。 そこで、色を個別に指定できる形式で書いてみた。xyzzyはなぜかバッ…

edictの挙動にうんざりした

ので、ちょっと改変。妙な挙動でバッファを出すのを止めて、ポップアップで表示するように。 ;;;edict.l(Tetsuya Kamei)より。 ;;; (in-package "editor") ;;; で実行すること。 ;;; 同名の関数を上書きします。 (defun edict-lookup-dictionary (from to di…

embedded-grep

howmのパクリというか、outlinexとかclickable-uriとかも参考にして作ってみた。howmのような中央管理ではなく、そのファイルのみとか、現在ディレクトリだけとかで検索して、その結果に飛べる。出来たばっかりで使ってないし、テストも良くしてないから使い…

howmは便利なのか?

アイデアを適当に書いて、後で調べやすいようにしておく環境が欲しいのだが、なかなかしっくりくるのがない。自分でもつくろーかな、とは思うのだが、そのアイデアをまとめるツールが(ry というわけで、とりあえずhowmを試してみた。ちょっとニーズに合っ…

ffパズル

転倒数を数えるようにしたので、結構大きめのサイズでも大丈夫。netinstallerの方だけupdateしてある。ffパズルとかも作れるけど、解くのは正直面倒くさい。 ■問題例 ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ │ 52 │ 1c │ 56 │ 8d │ 61 │ 75 │ fc…