Có thể định nghĩa hai hàm trong clojure gọi đệ quy cho nhau không? Ví dụ, cặp này:Hai chức năng gọi nhau một cách đệ quy
(defn a [x]
(if (= 0 x) 0 (b (dec x))))
(defn b [x]
(if (= 0 x) 0 (a (dec x))))
Compilation không thành công với:
Unable to resolve symbol: b in this context
Kể từ khi tôi chưa xác định b
khi tôi cố gắng gọi nó trong a
.
ví dụ, trong ruby này hoạt động tốt:
def a(x)
x == 0 ? x : b(x-1)
end
def b(x)
x == 0 ? x : a(x-1)
end
Làm cho tinh thần, đoán có một sự cân bằng cho tốc độ biên dịch mà nó không thể nhìn về phía trước cho các định nghĩa chức năng. Nhờ câu trả lời đã xóa cho liên kết này tới tài liệu (http://clojuredocs.org/clojure_core/clojure.core/declare) – spike
Sự cân bằng không dành cho tốc độ biên dịch, nhưng lại gặp lỗi. Cũng có hàm 'resolve' khi hai không gian tên cần tham khảo lẫn nhau. – noisesmith
Bạn có liên kết để biết thêm thông tin về điều đó không? Những loại lỗi nào đang bị tránh bởi trình biên dịch bỏ qua các định nghĩa hàm rõ ràng? – spike