Debugging Clojure中的简单符号解析错误

Debugging Clojure中的简单符号解析错误,debugging,clojure,Debugging,Clojure,我是clojure的新手,正在尝试用斐波那契序列(以相反的顺序)简单地生成一个列表。我尝试通过命令行运行程序(因此,println显示结果): 我得到以下错误: Exception in thread "main" java.lang.RuntimeException: Unable to resolve symbol: fibAcc in this context, compiling: C:\Users\...\ProjectEuler\2.clj:5) at clojure

我是clojure的新手,正在尝试用斐波那契序列(以相反的顺序)简单地生成一个列表。我尝试通过命令行运行程序(因此,
println
显示结果):

我得到以下错误:

Exception in thread "main" java.lang.RuntimeException: Unable to resolve symbol: fibAcc in this context, compiling:
C:\Users\...\ProjectEuler\2.clj:5)
        at clojure.lang.Compiler.analyze(Compiler.java:6235)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3452)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6411)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler$IfExpr$Parser.parse(Compiler.java:2597)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6409)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6397)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler$IfExpr$Parser.parse(Compiler.java:2605)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6409)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6397)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler$IfExpr$Parser.parse(Compiler.java:2605)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6409)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6397)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5572)
        at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5008)
        at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3629)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6407)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6397)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.access$100(Compiler.java:37)
        at clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:492)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6409)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler.eval(Compiler.java:6469)
        at clojure.lang.Compiler.load(Compiler.java:6902)
        at clojure.lang.Compiler.loadFile(Compiler.java:6863)
        at clojure.main$load_script.invoke(main.clj:282)
        at clojure.main$script_opt.invoke(main.clj:342)
        at clojure.main$main.doInvoke(main.clj:426)
        at clojure.lang.RestFn.invoke(RestFn.java:436)
        at clojure.lang.Var.invoke(Var.java:409)
        at clojure.lang.AFn.applyToHelper(AFn.java:167)
        at clojure.lang.Var.applyTo(Var.java:518)
        at clojure.main.main(main.java:37)
Caused by: java.lang.RuntimeException: Unable to resolve symbol: fibAcc in this context
        at clojure.lang.Util.runtimeException(Util.java:156)
        at clojure.lang.Compiler.resolveIn(Compiler.java:6720)
        at clojure.lang.Compiler.resolve(Compiler.java:6664)
        at clojure.lang.Compiler.analyzeSymbol(Compiler.java:6625)
        at clojure.lang.Compiler.analyze(Compiler.java:6198)
        ... 46 more

fib
之前定义
fibAcc
,或者在
fib
定义之前添加
(声明fibAcc)
,在
fib
之前定义
fibAcc
,或者在
fib
定义之前添加
(声明fibAcc)
,Clojure是一个单程“编译器”afaik,正如Jouni上面所说,在定义某个东西之前,你不能使用它


代码从上到下的顺序很重要。

Clojure是一个单通道“编译器”,正如Jouni上面所说的,在定义它之前,你不能使用它

代码从上到下的顺序很重要

Exception in thread "main" java.lang.RuntimeException: Unable to resolve symbol: fibAcc in this context, compiling:
C:\Users\...\ProjectEuler\2.clj:5)
        at clojure.lang.Compiler.analyze(Compiler.java:6235)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3452)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6411)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler$IfExpr$Parser.parse(Compiler.java:2597)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6409)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6397)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler$IfExpr$Parser.parse(Compiler.java:2605)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6409)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6397)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler$IfExpr$Parser.parse(Compiler.java:2605)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6409)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6397)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5572)
        at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5008)
        at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3629)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6407)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6397)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.access$100(Compiler.java:37)
        at clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:492)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6409)
        at clojure.lang.Compiler.analyze(Compiler.java:6216)
        at clojure.lang.Compiler.analyze(Compiler.java:6177)
        at clojure.lang.Compiler.eval(Compiler.java:6469)
        at clojure.lang.Compiler.load(Compiler.java:6902)
        at clojure.lang.Compiler.loadFile(Compiler.java:6863)
        at clojure.main$load_script.invoke(main.clj:282)
        at clojure.main$script_opt.invoke(main.clj:342)
        at clojure.main$main.doInvoke(main.clj:426)
        at clojure.lang.RestFn.invoke(RestFn.java:436)
        at clojure.lang.Var.invoke(Var.java:409)
        at clojure.lang.AFn.applyToHelper(AFn.java:167)
        at clojure.lang.Var.applyTo(Var.java:518)
        at clojure.main.main(main.java:37)
Caused by: java.lang.RuntimeException: Unable to resolve symbol: fibAcc in this context
        at clojure.lang.Util.runtimeException(Util.java:156)
        at clojure.lang.Compiler.resolveIn(Compiler.java:6720)
        at clojure.lang.Compiler.resolve(Compiler.java:6664)
        at clojure.lang.Compiler.analyzeSymbol(Compiler.java:6625)
        at clojure.lang.Compiler.analyze(Compiler.java:6198)
        ... 46 more