gambit의 gsi (4.6.6)를 실험하면서 잘못된 내부 입력을 입력 할 때 이상한 상황이 발생했습니다.gambit의 gsi에서 오류가 발생하면 정의를 표시 하시겠습니까?
일반적인 방법대로 모든 것이 예상대로입니다. i and
j는 보이지 않습니다.
> (let ((i 4) (j 3)) (display (+ i j)) (newline))
7
> i
*** ERROR IN (console)@2.1 -- Unbound variable: i
1> j
*** ERROR IN (console)@3.1 -- Unbound variable: j
그러나 let 블록을 사용하면 i and
j가 표시됩니다. 그것은 마치 내가 let 형태의 범위 안에 아직도있는 것처럼 거의이다. 그게 무슨 일 이니? 또한, 프롬프트상의 숫자를 보면. >
1>`2> 등 정보가있는 것처럼 보입니다. 그렇다면 무엇입니까? 어쩌면 중첩 또는 오류 모드와 관련이 있을까요?
2> (let ((i 2) (j 3)) (display + i j) (newline))
*** ERROR IN (console)@4.20 -- Wrong number of arguments passed to procedure
(display '#<procedure #2 +> 2 3)
3> i
2
3> j
3
이것은 클로저와 조금 다릅니다. 예 :
user=> (defn display [n] (print n))
#'user/one-arg-function
user=> (let [i 2 j 3] (display + i j) (println))
ArityException Wrong number of args (3) passed to: user$one-arg-function clojure.lang.AFn.throwArity (AFn.java:437)
user=> i
CompilerException java.lang.RuntimeException: Unable to resolve symbol: i in this context, compiling:(NO_SOURCE_PATH:0)
user=> j
CompilerException java.lang.RuntimeException: Unable to resolve symbol: j in this context, compiling:(NO_SOURCE_PATH:0)
샘플을 생성하기 전에 인터프리터를 다시 시작했습니다. – Bill