ggc

会社でsicp読書会が開かれておりまして、
生意気にもいそいそとそれに参加させてもらうことになりました。

そんで僕はgaucheをつかいたいんだけど、
gaucheにはtraceっていって、実行をトレースしてくれる関数がない!!

ということで、調べたところ、、、


結城浩SICP日記
http://sicp.g.hatena.ne.jp/hyuki/20060507/trace

ggc: Gauche Garbage Collection Project
http://homepage.mac.com/skimu/ggc/

soraなりの日々 - fc2 -
http://sora2hs.blog70.fc2.com/blog-entry-310.html


ということで早速ダウンロードしてインストールしてみましょう

$ cd $HOME/tmp
$ mv $HOME/Desctop/ggc-rel-0-17.tgz ./
$ tar -xvzf ggc-rel-0-17.tgz
$ cd ggc
$ cd trace
$ sudo make install

と、一気にいきました。

実体は、、、
/usr/local/share/gauche/site/lib
の中の
ggc/debug
にはいることになります。


ちなみにこんな風につかう。

#!/usr/local/bin/gosh
;; -*- coding: utf-8 -*-

(use ggc.debug.trace)

(define (pascal vir hor)
  (cond ((= hor 0) 1)
        ((= vir hor) 1)
        (else (+ (pascal (- vir 1) (- hor 1)) 
                 (pascal (- vir 1) hor)))))


;; main
(define (main args)
  (define v 4)
  (define h 1)
  (trace pascal)
  (pascal v h)
 0)


実行するとこんな風に出ます。

0:(pascal 4 1)
1:  (pascal 3 0)
    ->1
1:  (pascal 3 1)
2:    (pascal 2 0)
      ->1
2:    (pascal 2 1)
3:      (pascal 1 0)
        ->1
3:      (pascal 1 1)
        ->1
      ->2
    ->3
  ->4
; trace: pascal has been called 7 times.


はー解決よかったよかった。