Gauche でリーダーマクロ #?= を使ったデバッグ
2008年11月14日
Scheme処理系の Gauche で #?=
を使って printf debug をする。
#?=expr
は (debug-print expr)
と置き換えられ expr
を評価して結果を返す。
結果を返す前後に、評価式とその値を print する。
使用例
再帰的プロセスの factorial
gosh> (define (factorial n)
(if (= n 1)
1
(* n #?=(factorial (- n 1)))))
gosh> factorial
gosh> (factorial 10)
gosh> #?="(stdin)":15:(factorial (- n 1))
#?="(stdin)":15:(factorial (- n 1))
#?="(stdin)":15:(factorial (- n 1))
#?="(stdin)":15:(factorial (- n 1))
#?="(stdin)":15:(factorial (- n 1))
#?="(stdin)":15:(factorial (- n 1))
#?="(stdin)":15:(factorial (- n 1))
#?="(stdin)":15:(factorial (- n 1))
#?="(stdin)":15:(factorial (- n 1))
#?- 1
#?- 2
#?- 6
#?- 24
#?- 120
#?- 720
#?- 5040
#?- 40320
#?- 362880
3628800
gosh>
反復的プロセスの factorial
gosh> (define (factorial n)
(fact-iter 1 1 n))
gosh> factorial
gosh> (define (fact-iter product counter max-count)
(if (> counter max-count)
product
(fact-iter #?=(* counter product)
(+ counter 1)
max-count)))
gosh> fact-iter
gosh> (factorial 10)
gosh> #?="(stdin)":25:(* counter product)
#?- 1
#?="(stdin)":25:(* counter product)
#?- 2
#?="(stdin)":25:(* counter product)
#?- 6
#?="(stdin)":25:(* counter product)
#?- 24
#?="(stdin)":25:(* counter product)
#?- 120
#?="(stdin)":25:(* counter product)
#?- 720
#?="(stdin)":25:(* counter product)
#?- 5040
#?="(stdin)":25:(* counter product)
#?- 40320
#?="(stdin)":25:(* counter product)
#?- 362880
#?="(stdin)":25:(* counter product)
#?- 3628800
3628800
gosh>
プログラミングGauche
posted with amazlet at 08.11.14
Kahuaプロジェクト
オライリージャパン
売り上げランキング: 22775
オライリージャパン
売り上げランキング: 22775