Lispプログラミング 第3回


第9章 デバッグ用関数

◎今日の命令1:命令の実行状況を知るための命令
命令の基本形 関数の機能 使い方の例 結果
(trace 関数名) その関数が呼ばれた時にそのことを表示する (trace abc) (abc)
(untrace 関数名) trace の機能を取り消す (untrace abc) nil
※traceに未定義の関数を指定すると、エラーメッセージが表示され、nil が返ってきます。 ※この他、デバッグに有益な関数として、print関数がありますが、それは次章に紹介します。

◎以下に、trace命令の使用例を示します。

  -> (def fact (n)
      (cond ((= n 1) 1)
         (t (* n (fact (sub1 n))))
      ))
  fact
  -> (trace fact)
  (fact)
  -> (fact 5)
  1+:fact (5)   n=5としてfactを求める
  |2+:fact (4)   n=4   〃
  | 3+:fact (3)  n=3   〃
  | |4+:fact (2)  n=2   〃
  | | 5+:fact (1) n=1   〃
  | | 5-:fact 1  (fact 1)→1
  | |4-:fact 2   (fact 2)→2
  | 3-:fact 6   (fact 3)→6
  |2-:fact 24   (fact 4)→24
  1-:fact 120   (fact 5)→120
  120       最終結果は120
  ->

演習9-1