Entries from 2006-01-01 to 1 year

smolder

smolderはビルドが難しい。 そして裏で何が起こっているか分からない。

マクロの展開を考える

そろそろマクロの展開を考えよう。 とても簡単な例で妄想。 簡単な例 (define-syntax show (syntax-rules () ((_ a) (display a)))) (show "higepon") define-syntax の時点で、 syntax-rules はパースされて Node ツリーとなる。 "show" => [node-pattern1]…

マクロのマッチング関数を書く

単純なパターン - and - () - (_ a b) - (and 3 4) はマッチ OK のパターン。 導かれるのは以下2つ。 マクロ名の一致 Node数の一致 入れ子のマッチ - when - () - (_ pred a b) - (when (= x 3) (display "x=3") (display "\n")) マクロ名の一致 マクロが下…

Test::Chimps

g:subtech:id:miyagawa:20060814:1155561164で宮川さんが紹介されている、Test::Chimpsがとてもよい感じ。 テストを書くのも通すのも楽しそうなので、何とか Perl の make test 以外の出力(例えばcppunitの結果とか)も受け取れないかなと30分位調べたけど…

マクロの実装を想像する

目的と経緯 マクロを実装するにあたり、マクロをある程度知ることはできた。 次はマクロを実装する裏側を想像し、それが妥当かどうか検証する。 お題 まず考えるためのお題は (define-syntax when (syntax-rules () ((_ pred a b) (if pred (begin a b))))) …

マクロを知る

目的と経緯 マクロを実装するには、マクロを知らなければならない。 知ってみよう。 R5RS R5RS を読んだがよく分からず。 使ってみないとよく分からないことを悟る マクロを使ってみる Scheme 入門 15. 構文の定義より 基本 (define-syntax nil! (syntax-rul…

調べもの

gauche マクロ - Google イメージ検索うほっ。

体調

大分良くなったけど万全ではないのであまり無理をしない方向で。 年内リリースは無理っぽい。

dired をさらに快適に

細かいですが dired をさらに快適にする工夫を紹介します。 1.まずはsorterのインストール sorter — diredを参考に設定&インストールしてください。 sorter は dired で「s」キーを押すと 日付によるソート 拡張子によるソート サイズによるソート ファイル…

saveplace.el と session.el の関係

開いていたファイルのカーソルの位置を覚えてくれている便利な saveplace.el ですが最近どうも動いていないなと思っていました。 で、良く調べていたところ session.el の設定で (when (require 'session nil t) (setq session-initialize '(de-saveplace se…

なぜかYAML

テストをコードに埋めていくと悲しい気持ちになるので、何故かYAMLで外だし。テストに使うデータが.cppに埋め込まれた悲しい感じ↓ _Y("and" , "(_ a b ...)" , "(and a b c)"); _Y("when" , "(_ pred a b)" , "(when (= x 3) (display \"x=3\") (display \"\…

むーん

体調が良くない。R5RSを読もう。

継続マラソン7

;; SaitoAtsushi ;; 『ambマダー?』 ;; arino ;; 『他のcall-withシリーズと比較してみる、というのはどうでしょう?』 ;; 御意見どうもです。 ;; arinoさんの意見を採用してみました。 ;; call-withシリーズって他に何があるのさ。 ;; call-with-valuesは、…

GCあれこれ

GC

GCに関してWebの資料やら、「情報処理学会誌94年11月号」を読み漁っていて大分詳しくなりました。 適当なメモは→Scheme/B.GC調査/02.GC概要 - Mona PJ Wikiに書いてあります。 ひとつまだ分からないことがあって迷っています。 GCを持たないAという言語で、G…

.h と .cpp の切替え

rails.elのアレで思い出したので設定した。 (add-hook 'c++-mode-hook (function (lambda () (define-key c++-mode-map "\C-c\C-p" 'ff-find-other-file) (define-key c++-mode-map "\C-c\C-n" 'ff-find-other-file) )))

Emacs で wdired と moccur-edit を使っていない人は(ry

Emacs で wdired と moccur-edit を使っていない人は(ry と思ったので紹介します。 wdired wdired ではファイルのリネームが超簡単になります。 mv やエクスプローラで F2 を押してリネームをしている人は wdired を使うべし。 dired で ~/tmp を表示すると…

継続マラソン6

;; なんとなく継続を渡す手続きを書きたくなった。 ;; 誰かネタください(切実 (define cool-cont #f) (define bad-cont #f) (begin (let ((ct (call/cc (lambda (c) (set! cool-cont c) "0")))) (if (not (string=? ct "0")) (begin (display ct) (display "…

一回おやすみ

風邪のため。むーん。

継続マラソン5

昨日書いた以下のコードですが (define (message-join l) (call/cc (lambda (end) (letrec ((message-join-iter (lambda (ll messages) (if (null? ll) (end messages) (message-join-iter (cdr ll) (string-join (list messages (car ll)))))))) (message-j…

GCの本を立ち読みしてきた

八重洲ブックセンターの洋書コーナーに行って、薦められたGCの本を立ち読みしてきました。 GCのアルゴリズムが古典から最近のまで詳しく載っていてよさげでした。 良いのはコード例が載っていること、そのアルゴリズムの良い点・悪い点などが比較とともにか…

作業

monapi.cpp -> monapi_crt.cpp リネーム(23日にやってた) System::getStdinStream, System::getStdoutStream追加しました (→id:shotaro_tsuji) fwrite(,,stdout)で monapi_stdout_write につながってほしいな さて出かけよう。

snippet.el

うーん。spaceキーでの補完をやめたい。どうしたらよいだろう。後で調べる。

GCの資料

GC

GCの資料を何となく集めています。 http://b.hatena.ne.jp/higepon/gc/ 情報処理学会誌94年11月号にGCの特集があり,詳しい解説が読める。 らしい、どこかでゲットしたいところだ。

継続マラソン4

;; 昨日のarinoさんの例にならって手続き内に閉じた call/cc で大域脱出します。 ;; joinするのに string-join 使っていたら本末転倒じゃないか!というのは遊び心ということで。 (define (message-join l) (call/cc (lambda (end) (letrec ((message-join-i…

DLL初期化周り整理

monapi staticリンク時 user_start monapi_initialize_memory invokeFuncList [ __CTOR_LIST__はこのとき monapi_crt/monapi_implで同一のものを参照 ] __attribute__( (constructor) ) void monapi_initialize()[ invokeFuncListの呼出しによる ] user_star…

rails.el まとめ

rails.vim の情報は→id:secondlife:20061222:1166781841へどうぞ。 最近お仕事で初めてRailsのコードを書いているのですが、書きはじめて1週間くらい経ってからやっと rails.el の存在に気付きました。 僕に Rails を教えてくれる、はてのくんは Vim 使いだ…

ゆかし入りたい!

http://www.yucasee.jp/index.php このSNSのぞいてみたいんですが招待制か。 誰か招待してくれたらうれしいなー。と思う今日このごろ。

継続マラソン3

今日は忘年会のためパスと行きたいところだけど何とか少しでも。 ;; arinoさんからネタを頂きました ;; 率直な感想では急に難しくなりました(笑) (define (fact n m) (call/cc (lambda (end) (letrec ((fact2 (lambda (n sum) (if (< n m) (end sum) (fact2 …

継続マラソン2

;; ネタが見つからなかったので forループなんていかがでしょう (define (for-loop max) (let ((i 0) (cont #f)) (if (> max (call/cc (lambda (c) (set! cont c) i))) (begin (p i) (set! i (+ i 1)) (cont i))))) (for-loop 5) setjmp/longjmp的な使いかた…

スタートアップルーチンやらDLLのエントリポイントやら

散々はまりまくって、某スレで__CTOR_LIST__ の挙動の違い教えてもらいやっと理解した。 論理的には以下の順序で初期化が行われればOK static リンク時 malloc/free new/delete用ユーザー空間メモリ初期化 staticリンクされたものの __CTOR_LIST__ で初期化…