Gauche でリーダーマクロ #?= を使ったデバッグ

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
プログラミングGauche

posted with amazlet at 08.11.14
Kahuaプロジェクト
オライリージャパン
売り上げランキング: 22775
«
»