2016-11-17 8 views
2

guile 함수 추적을 사용하려고 할 때마다 가능한 언 바운드 변수가 생깁니다.언 바운드 변수 'trace'

[email protected](guile-user)> (define (fact1 n) 
(if (zero? n) 1 
(* n (fact1 (- n 1))))) 
[email protected](guile-user)> (trace fact1) 
;;; <stdin>:4:0: warning: possibly unbound variable `trace' 
<unnamed port>:4:0: In procedure #<procedure 10e4080c0 at <current input>:4:0()>: 
<unnamed port>:4:0: In procedure module-lookup: Unbound variable: trace 

Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue. 
[email protected](guile-user) [1]> 

왜 이것이 작동하지 않는지 알고 있습니다.

+0

계략은 기본적으로 포함 된'trace' 기능이 없습니다. 하지만 ['(ice-9 debug)'] (https://www.gnu.org/software/guile/docs/docs-1.8/guile-ref/Tracing.html) 모듈에는 모듈이 포함되어있는 것 같습니다. Guile에서 '흔적'이 효과가 있다고 생각하게 한 부분을 어디에서 보았습니까? –

+0

강사가 그 문제를 해결해주었습니다. – AmaCode

+0

좋아,'(use-modules (ice-9 debug))'를 사용하여'trace '를 먼저 가져와야 할 것입니다. –

답변

2

사용 ,trace는 :

GNU Guile 2.0.12 
Copyright (C) 1995-2016 Free Software Foundation, Inc. 

Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'. 
This program is free software, and you are welcome to redistribute it 
under certain conditions; type `,show c' for details. 

Enter `,help' for help. 
[email protected](guile-user)> (define (fact1 n) 
... (if (zero? n) 1 
... (* n (fact1 (- n 1))))) 
[email protected](guile-user)> ,trace (fact1 5) 
trace: | (#<procedure 110221480> #(#<directory (guile-user) 10f9fabd0> #f)) 
trace: | #(#<directory (guile-user) 10f9fabd0> fact1) 
trace: (#<procedure 11022e1e0 at <current input>:2:0()>) 
trace: (fact1 5) 
trace: | (fact1 4) 
trace: | | (fact1 3) 
trace: | | | (fact1 2) 
trace: | | | | (fact1 1) 
trace: | | | | | (fact1 0) 
trace: | | | | | 1 
trace: | | | | 1 
trace: | | | 2 
trace: | | 6 
trace: | 24 
trace: 120