2010-07-31 29 views
5

Với việc đóng cửaCác câu hỏi (áp dụng) của Closure?

(apply str [\a \b]) 

(apply str '(\a \b)) 

lợi nhuận "ab".

(apply str (\a \b)) 

trả về lỗi.

Tại sao lại như vậy?

+0

Tôi không biết Clojure, nhưng có thể [] là danh sách nhưng() là cái gì khác không? – jtbandes

+1

@jtbandes: [] là một vectơ (suy nghĩ giống như một mảng phát triển).() là một danh sách nhưng nó được đánh giá là một hàm nếu nó không được trích dẫn. Thats Code là Data Thing xung quanh Lisps. – nickik

Trả lời

14

(\a \b) có nghĩa là "hãy gọi hàm \a với đối số là \b" và vì ký tự \a không phải là chức năng, nó không thành công. Lưu ý sự khác biệt trong những điều sau đây:

 
user=> (+ 1 2 3) 
6 
user=> '(+ 1 2 3) 
(+ 1 2 3) 

Theo nguyên tắc chung, nếu bạn muốn viết một chuỗi đen, sử dụng một vector thay vì một danh sách được trích dẫn từ các báo cũng sẽ ngừng đánh giá các bộ phận bên trong danh sách, ví dụ:

 
user=> [(+ 1 2) (+ 3 4)] 
[3 7] 
user=> '((+ 1 2) (+ 3 4)) 
((+ 1 2) (+ 3 4))