###(1) #?=でもってまず呼ばれるはずのメソッドが呼ばれていない(かわりにベースクラスのメソッドが呼ばれてしまっている)のを確認 (2)ジェネリック関数呼び出し時点でmethodsスロットの値やcompute-applicable-slotsの結果などを表示させる、で追っかけました。
#なお、なぜ呼ばれてなかったかというと、(define-method foo ((x <x>) y . z) ...)というふうにrest引数を取るメソッドを書いてたつもりが、(define-method foo ((x <x>) y .z) ...) となっていたというとほほな理由でした。後者は3引数のメソッドなので2引数でジェネリック関数を呼び出したら呼ばれないわけです…
#なるほど。TRACEはどういう仕様だといいのでしょう? 呼び出し部をdebug-printすると、呼び出した関数を表示するような?
#伝統的なtraceは、(trace 'somefn)とかするとsomefnが呼ばれる度に引数を表示し、リターンするときに返り値を表示するようなものです。同じようにジェネリック関数にフックをかけると、呼び出されたときに引数だけでなくマッチするメソッドとその順位が表示され、さらに各メソッドごとにtraceされてるような表示が出たりするといいかなと。出る情報が多すぎるのも困るのでレベルを指定できるようにして。フックをかける操作は#?=に似た形でソースに埋め込んでもいいですし、trace関数のようにREPLからやってもいいですが。そういえば「#?!式」で(debug-break 式)に展開してブレークポイント設定、っていうのも昔から考えてるんだけどやってないや。
#マニュアルのデバッグのところのtrace/untraceライブラリへのリンクが切れていますね。これは後継プロジェクトが走っているんですよね?
##Gauche:デバッガ
http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3a%E3%83%87%E3%83%90%E3%83%83%E3%82%AC
#traceの話は、ここに関係あるわけですね? デバッガとはまた違う話でしょうか?
#traceは伝統的なLispのデバッグ機能の一種です。狭義の「デバッガ」はプログラムを途中で止めて変数を覗いたりステップ実行したりするやつなんでちと違いますが。私自身はtraceをあまりつかわないのでGaucheに入れてないですが、SLIBのtraceがまだ使えるんじゃないかな。このへん見てください。 http://blog.livedoor.jp/dankogai/archives/50458135.html trace一般について知りたければ「Scheme trace」とか「Lisp trace」とすればぐーぐる先生が教えてくれます。 #traceはそうなのですが、このことです---> 「#?!式」で(debug-break 式)に展開してブレークポイント設定
#ブレークポイントというとデバッガだなあと。
#traceと話がつながっているのかと思ったのでした。
#ああ、#?!というのはまさしくデバッガに入る機能です。traceとは関係ないですが、debug-printの話が出たのでついでに思い出したのです。
#"Seven trees in one" 後半の証明はちゃんと読んでないけど、前半部分、数学者の発想の過程が見える感じでおもしれーと思った。 http://arxiv.org/pdf/math/9405205v1.pdf #"The reader who objects that this is nonsense has not truly entered into the eighteenth century spirit" :-)
#無茶なアナロジーから突拍子もない仮説を立てる人ってのはたくさんいるけど、それ自体は発想の源としてとっても有用なんだろうな。ヨタ話で終わるか意味のある話になるかは、立てた仮説を言いっぱなしにするか後からきちんと証明するかってとこで。