Tài liệu cho conj
(từ clojure.org):
conj [oin]. Trả lại bộ sưu tập mới với xs 'đã thêm'. (conjil item) trả về (item). 'Ngoài ra' có thể xảy ra ở các 'địa điểm' khác nhau tùy thuộc vào loại bê tông.
Sẽ hiệu quả hơn khi "thêm" phần tử vào cuối vectơ, trong khi hiệu quả hơn để làm như vậy ở đầu danh sách. conj
sử dụng bất cứ điều gì là hiệu quả nhất cho cấu trúc dữ liệu bạn cung cấp cho nó.
Trong ví dụ bạn đưa ra, '(1 2 3)
và (seq [1 2 3])
cả thực hiện ISeq
(xem documentation for seq?
), trong khi [1 2 3]
không.
Clojure conj
cuối cùng gọi phương thức cons
(không bị nhầm lẫn với hàm cons
- phương pháp này là mã clojure nội bộ) trên cấu trúc dữ liệu cơ bản; đối với các vectơ (PersistentVector
), cons
thêm các phần tử vào cuối, trong khi các danh sách được thêm vào phía trước (phương thức cons
cho PersistentList
s trả về một danh sách mới với phần tử mới làm đầu của nó và danh sách hiện tại làm đuôi của nó) .
Tôi đã học Clojure kể từ tháng 5 năm nay. Tôi thấy việc đào sâu vào các bài tập như thế này rất hữu ích, nhất là khi tôi chưa bao giờ học một ngôn ngữ giống Lisp trước Clojure. – octopusgrabbus