2010-01-25 16 views
9

Làm quen với clojure và học nó bằng cách làm việc thông qua SICP.Clojure- tại sao đoạn mã này không hoạt động trong clojure, có một số bản ghi nhớ đánh giá lười biếng mà tôi đang thiếu không?

Tôi không thể lấy đoạn mã này từ SCIP 1.3.1 để hoạt động.

Tôi đang thiếu gì?

(defn sum [term a next b] 
    (if (> a b) 
     0 
     (+ (term a) (sum term (next a) next b)))) 

(defn sum-cubes-new [a b] 
    ((sum cube a inc b))) 

ĐÂY là thông báo lỗi:

java.lang.Integer cannot be cast to clojure.lang.IFn 
    [Thrown class java.lang.ClassCastException] 

Restarts: 
0: [ABORT] Return to SLIME's top level. 

Backtrace: 
    0: user$sum_cubes_new__2868.invoke(summation.clj:33) 
    1: user$eval__2874.invoke(NO_SOURCE_FILE:1) 
    2: clojure.lang.Compiler.eval(Compiler.java:4642) 
    3: clojure.core$eval__5236.invoke(core.clj:2017) 
    4: swank.commands.basic$eval_region__910.invoke(basic.clj:40) 
    5: swank.commands.basic$eval_region__910.invoke(basic.clj:31) 
    6: swank.commands.basic$eval__930$listener_eval__932.invoke(basic.clj:54) 
    7: clojure.lang.Var.invoke(Var.java:359) 
    8: user$eval__2871.invoke(NO_SOURCE_FILE) 
    9: clojure.lang.Compiler.eval(Compiler.java:4642) 
10: clojure.core$eval__5236.invoke(core.clj:2017) 
11: swank.core$eval_in_emacs_package__458.invoke(core.clj:58) 
12: swank.core$eval_for_emacs__536.invoke(core.clj:126) 
13: clojure.lang.Var.invoke(Var.java:367) 
14: clojure.lang.AFn.applyToHelper(AFn.java:179) 
15: clojure.lang.Var.applyTo(Var.java:476) 
16: clojure.core$apply__4370.invoke(core.clj:436) 
17: swank.core$eval_from_control__461.invoke(core.clj:65) 
18: swank.core$eval_loop__464.invoke(core.clj:70) 
19: swank.core$spawn_repl_thread__598$fn__630$fn__632.invoke(core.clj:179) 
20: clojure.lang.AFn.applyToHelper(AFn.java:171) 
21: clojure.lang.AFn.applyTo(AFn.java:164) 
22: clojure.core$apply__4370.invoke(core.clj:436) 
23: swank.core$spawn_repl_thread__598$fn__630.doInvoke(core.clj:176) 
24: clojure.lang.RestFn.invoke(RestFn.java:402) 
25: clojure.lang.AFn.run(AFn.java:37) 
26: java.lang.Thread.run(Thread.java:637) 
+1

Tôi đã thay đổi mã của bạn để sử dụng thụt lề tiêu chuẩn vì nó làm cho lỗi trong 'sum-cubes-new' hiển nhiên. –

Trả lời

19

(defn tổng hợp hình khối mới [ab]
( (tổng khối một inc b) ))

Tập hợp các parens xung quanh cuộc gọi đến tổng là làm cho nó cố gắng đánh giá số kết quả dưới dạng hàm.

+0

Có. Đây chính là nó. Cảm ơn. – lordOfChaos

Các vấn đề liên quan