#:g1: eggs: debugの紹介

Posted 2014-10-02 00:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の275日目です。

eggs: debugとはなにか

 eggs: debugは、Peter Danenberg氏作のChicken用の関数のトレースやprintデバッグのためのユーティリティです。

パッケージ情報

パッケージ名eggs: debug
Chicken eggs:debug - The Chicken Scheme wiki

インストール方法

$ sudo chicken-install debug

すれば、

(use debug)

で使えます。

試してみる

 実行トレースにはtraceが用意されていて、プリントデバッグ用の関数はdebugが用意されています。

(define (repeat n)
  (if (zero? n)
      #f
      (repeat (- n 1))))

(trace repeat)

(repeat 8) ;>> ;; Arguments to repeat: (8) ;>> ;; Arguments to repeat: (7) ;>> ;; Arguments to repeat: (6) ;>> ;; Arguments to repeat: (5) ;>> ;; Arguments to repeat: (4) ;>> ;; Arguments to repeat: (3) ;>> ;; Arguments to repeat: (2) ;>> ;; Arguments to repeat: (1) ;>> ;; Arguments to repeat: (0) ;>> ;; Values from repeat: (#f) ;>> ;; Values from repeat: (#f) ;>> ;; Values from repeat: (#f) ;>> ;; Values from repeat: (#f) ;>> ;; Values from repeat: (#f) ;>> ;; Values from repeat: (#f) ;>> ;; Values from repeat: (#f) ;>> ;; Values from repeat: (#f) ;>> ;; Values from repeat: (#f) ;=> #f

(define (repeat n)
  (if (zero? n)
      #f
      (debug (repeat (- n 1)))))

(repeat 8) ;>> (((repeat (- n 1)) => #f)) ;>> (((repeat (- n 1)) => #<unspecified>)) ;>> (((repeat (- n 1)) => #<unspecified>)) ;>> (((repeat (- n 1)) => #<unspecified>)) ;>> (((repeat (- n 1)) => #<unspecified>)) ;>> (((repeat (- n 1)) => #<unspecified>)) ;>> (((repeat (- n 1)) => #<unspecified>)) ;>> (((repeat (- n 1)) => #<unspecified>)) ;=> #f

 デバッグの出力の制御の為にパラメータdebug?が設定されています。(debug? #t)で有効、(debug #f)で無効にできますが、パラメータなので動的に変更できると思いきや、そうでもないようで、これは仕様なのかバグなのか。

まとめ

 今回は、eggs: debugを紹介してみました。
traceだけでuntraceがないというのも珍しいですね。

comments powered by Disqus