2006-01-01から1ヶ月間の記事一覧

プチプチつぶしの四十八手

Scuba diving のやつちょっとやってみたい。

(dec! (slot-ref uim user-count))

まあ現状ではしょうがないすね。User から見れば実質大差ないし。Composer framework でどれぐらい珍しい hack を展開できるかにかかってくるんかしら。…digress してないでさっさと macro 完成させないとな。あーでも今週全然時間無い。色々掛持ちしすぎ。

はてなダイアリー捨てらる

私も bloglines にいくつか放りこんでみた。kzk さんはこういうの見つけてくるの上手いよな。読み書きが尋常じゃなく遅い私ではそんなにアンテナ高く揚げたら何もできなくなりそう。で、bloglines。RSS じゃないとだめなのだろうか? それって firefox extens…

(書き物中) んがー

ですます→長い。くどい。文章の内容に集中しにくい (書き手が)。S/N 比↓。 だである→偉そう。難そう。すぐ文体が arcane に流れる (雅文なんか書けないのに)。誰かなんとかして。

良く見ると libtool て build 側で生成するもんみたいね。頭の方に "# Generated automatically by (GNU uim 1.1.0)" とか書いてあるのがちょっとワロタ。 そんなわけでとりあえず、はい。 jun@debian /dvl/uim/org/trunk $ libtoolize --version libtoolize…

Corner case 地獄その2

…と思ったけど (もっと大きな test の一部だったので)、どうもただの gauche の…バグ? でもないのか。やっぱりバグと判断したので Wiliki に移動。固定 link 機能が欲しいな。

uim

再現しまへん。Log を見る限りでは jun@debian /dvl/uim/org/trunk $ svn up -r 2951 Enter passphrase for key '/home/jun/.ssh/id_dsa': At revision 2951. jun@debian /dvl/uim/org/trunk $ tail -n 13 uim/uim-helper.c int is_setugid(void) { uid_t ru…

継続

SCM/guile 方式ではないらしい。Cheney on the MTA の方式?どの道 C stack を使う以上 copy は避けられんよなあ…そうしないと caller に callee の引数 stack とか破壊されるし。

debug-print

どの出力がどの expression のどの評価 instance に対応するのか default では非常にわかりにくいから改造。file:line 情報を出すにはもう一つ下の interface を使うことになりそう。まあとりあえずこれでいいか。 しかし何でもアリだな syntactic closure …

第一級継続

( ´ー`).oO(どうするつもりなのかな) ANF 変換とかややこしい事は出来ないから、SCM/guile 方式かな?

uim

自分では大昔に設定したっきりなのできれいさっぱり忘れてたけど、on-key が default で S-space なんという脳障害仕様を踏襲してるのは如何なものか。Shift と space が存在する keyboard で使う限りうざったいだけだと思うんだけど、せめてこう、C-space …

toplevel define

昨日の話題の続き。 # shiro 『その疑問は正しい。toplevel defineはSchemeのダークコーナーなのです。R5RSの7.2節のformal semanticsでは敢えて触れられていません (「処理系が都合の良いセマンティクスを選べる」ということです)。なお、defineの第2引数の…

internal define

(let ((a 1)) (define (f x) (define b (+ a x)) (define a 5) (+ a b)) (f 10))これで返ってくる値は幾らかという話。「R5RS では letrec と等価と書いてあるから code 自体が illegitimate」とは言ってみたものの、SICP がなぜ 20 を正しいとしているのか…

なごむ

バリワロタ(失敬無論、ワロタ理由は主に déjà vu (顔 ;; 自作 macro にて

実験がアホらしくてやってられない

自然淘汰による進化を model 化します。そこまではよい。それを 赤玉黄玉 100 個を袋から取り出すことで効果を実験的に見守ります。氏ね。何が悲しくて Gauche で script 書けば 10 分以内に済む simulation を二時間も三時間もかけてやらんならんねん。

barrel shifter

めも: anthy でんしかいろ→伝しかいろふーん… まあ K6 だったか PenPro だったかの最適化 manual に乗算が 2 cycle とか書いてあるから、shift 所要時間が shift 量非依存なのは当り前といえば当り前か。 とりあえず調べてみてこんなのが出てきた (紹介元) …

shift と /

C

以前、(sign)a >> n == a / (1 妄言を吐いたことがありますが、間違ってます。過去にも同じ過ちを犯した覚えが鮮烈に甦ってきました。進歩がありませんね。C では / は 0 に向かって切り捨てるのに対して、>> は floor です。つまり -1 / 8 = 0, -1 >> 3 = -…

tag GC bit check

お、何時の間にか対策が入ってる。いい感じだ。しかしこの +/* the upper bit of obj's tag and cdr's GC bit must be the same value */ +#define SCM_HAS_VALID_CDR_GCBITP(obj, cdr) \ + ((SCM_TAG(obj) >> (SCM_TAG_OFFSET + (SCM_TAG_WIDTH - 1))) == S…

syntax-rules

1 pass に戻したら単純になった orz微妙に遅くなるかも知れんけど、versatility の面で明らかに優れてる。

pretty-print が無い…orz ;; 名前が違うのかしら そういう状況か。なるほど。ていうか slib ぐらい調べりゃよかった。

C-M-w で次の kill を append-to-killring にできるのか。知らんかった。S 式を自動生成したいとき、M-x run-scheme でやればいちいち M-x replace-string nil RET () とかしなくて済むのか。気づかなかった。←アホすぎしかし R5RS macro は R5RS macro 自身…

Corner case 地獄その1

思わず↑「その1」とか書いてしまうあたりがもうorzMacro の template 内で束縛されて改名された識別子を一旦 vector を通して submacro に渡してみる: (let ((x 'outside)) (let-syntax ((foo (syntax-rules () ((_) (let ((x 'inside)) (let-syntax ((bar (…

Macros That Work William Clinger, Jonathan Rees

Naïve にやると O(n^2) なのが let, lambda みたいな束縛構文を expander が認識すると O(n) になるよ、という話。多分。しかし sigscheme では束縛構文をいくらでも追加できるので、論文自体がただの嫌がらせでしかない。

unwrap-syntax が足りてない?

いくらでも corner case が出てくる。怖や怖や… gosh> (define-syntax macro (syntax-rules () ((_) #(b)))) #<undef> gosh> (eq? 'b (vector-ref (macro) 0)) #fあれ? っていうか vector って quote しないといけないのか。変すぎorz</undef>

人任せにするつもりのやり残し

一個忘れてた。"List の最後の一個を除いて処理し、最後の一個は特別扱い (caller に返すとか)" というのは特に多い操作なので、それ用の macro を用意するとよいかもしれない。(FOR_EACH() そのものより多いかも)

ひとまず完了

今後の課題 (人任せ): POP() を SHIFT_ARG() のように代入先を引数に取るようにしたほうがいい。今の semantics は元々loop の step 部に書きやすそうだったから選んだだけで (大失敗だったけど)、もはや存在価値は皆無。でもないけどね、ほんの一部で記述が…

面白くない部分には集中力無し

SICP 読んでた。さっさと終わらせねば。

ところで

めも: #define CIRCULAR_LIST INT_MIN は compaction が入ると要修正。

Parameter を破壊しない FOR_EACH

こんなしますた。 FOR_EACH_PAIR (tmp, args) { do_something (CAR (tmp)); }FOR_EACH_PAIR / PAIR_FOR_EACH / FOR_EACH_SUBLS でちょっと悩んだ

if (test = EVAL(test, env), NFALSEP(test)) { #if SCM_STRICT_ARGCHECK POP_ARG(rest); ASSERT_NO_MORE_ARG(rest); #endif return conseq; } else {SCM_INVALID を返さないようにすると動かなくなります。POP と UNSAFE_POP に分けるか、SAFE_POP と POP …