Gaucheでtraceするまで

dankogaiさんのエントリを見ると、どうやらtraceすれば分かりやすくなりそう。なので書いてある通りにslibをインストールしようとする

cd ~
curl -O http://swissnet.ai.mit.edu/ftpdir/scm/slib3b3.tar.gz
cd /usr/local
sudo tar zxvf ~/slib3b3.tar.gz

が、

tar: Unrecognized archive format
tar: Error exit delayed from previous errors.

というエラーが解凍時に出てきて進めない。ファイルが壊れてるのかな?


何回か試したけどやっぱり出来ないので、こっちのやり方に変更。

まずココからslibをDLして/usr/localにダウンロードファイル(slib-3b3.zip)を置いておく。
で、

cd /usr/local/
unzip slib-3b3.zip
cd slib
sudo make infoz
sudo make install

とやった後にGaucheをリビルドする。ついでにスレッドを使えるように(参照)しておく。

cd Gauche-0.9.2
 ./configure --enable-threads=pthreads --enable-multibyte=utf-8
 make && make check && sudo make install

これでtraceが使えるはず。


試してみる。

gosh> (use slib)
#<undef>
gosh> (require 'trace)
#t
gosh> (define (fact n) (if (<= n 1) 1 (* n (fact (- n 1)))))
fact
gosh> (fact 10)
3628800
gosh> (trace fact)
#<closure (debug:trace-procedure debug:trace-procedure)>
gosh> (fact 10)
CALL fact 10
  CALL fact 9
    CALL fact 8
      CALL fact 7
	CALL fact 6
	RETN fact 720
      RETN fact 5040
    RETN fact 40320
  RETN fact 362880
RETN fact 3628800
3628800

gosh> (untrace fact)
#<closure fact>
gosh> (fact 10)
3628800

できてますねー。