バックトレースとか、スタックフレームのこと
さて、現在のスタック・トレースを得るには make-stack
関数を呼び出します。
引数の #t
を忘れないようにしてください:
(define a-stack (make-stack #t))
a-stack
の型をとりあえず <stack>
としましょう。
<stack>
オブジェクトの中には <frame>
オブジェクトが幾つか含まれています。
<frame>
オブジェクトを取り出すには stack-ref
関数を使います。
また、<stack>
オブジェクトの中に含まれている <frame>
オブジェクトの数は stack-length
関数で知ることができます。
<stack>
オブジェクトの中に含まれている全ての <frame>
オブジェクトをリストとして得たいということだってありますよね。
stack->frames
関数を使えば、それができます。
これは、guile
のソースコードの中のテストコードから取ってきたものです:
(define (stack->frames stack) "Return the list of frames comprising STACK." (unfold (lambda (i) (>= i (stack-length stack))) (lambda (i) (stack-ref stack i)) 1+ 0))
<frame>
オブジェクトに対しては frame?
だとか frame-procedure
などの関数が使えます。
が、関数を呼んでいるファイルパスやら行数などはなんかとれなさそうです。
Why Guile People!!!??