Đang cố gắng để làm bài tập 1.16 (phiên bản lặp đi lặp lại của nhanh exp) trong "Cấu trúc và Giải thích chương trình máy tính" với Clojure tôi đến với điều này:Đánh giá một phần của Clojure cond
(defn fast-it-exp [base exp res]
(cond (= exp 0) res
(odd? exp) fast-it-exp base (- exp 1) (* base res)
:else fast-it-exp base (/ exp 2) (* base base res)))
Đang cố gắng nó ra:
user=> (fast-it-exp 0 0 10)
10 ;yep
user=> (fast-it-exp 2 2 2)
1 ;no...
user=> (fast-it-exp 1 1 1)
#<user$fast_it_exp__59 [email protected]> ;huh?!
Có vẻ phần "lẻ" của biểu thức cond trả về hàm thay vì đánh giá. Tại sao? Tôi đã thử đặt dấu ngoặc đơn quanh các biểu thức sau các biến vị ngữ nhưng dường như cú pháp không chính xác, đây là cách tốt nhất mà tôi có thể đưa ra. Tôi đang sử dụng rev 1146 của Clojure.
Nếu bạn muốn áp dụng một chức năng, sau đó nó có lẽ đã có một dấu mở ngoặc bên trái của chinh no. Và trong dòng cuối cùng của bạn không có '(' trước 'nhanh-nó-exp'. Và không chỉ ở dòng cuối cùng ... –