Tôi muốn biết cách tạo một chuỗi các giá trị duy nhất không xác định, vô hạn trong Clojure.Xây dựng trình tạo id lười biếng, không tinh khiết
(def generator ...) ; def, not defn
(take 4 generator) ; => (1 2 3 4)
(take 4 generator) ; => (5 6 7 8). note the generator's impurity.
Tôi nghĩ rằng thiết kế như vậy có thể thuận tiện hơn so với ví dụ: bao gồm một giá trị số nguyên duy nhất vào một loại tham chiếu và tăng giá trị đó từ người tiêu dùng của nó, như:
- Cách tiếp cận được đề xuất giảm chi tiết thực hiện cho một điểm thay đổi: máy phát. Nếu không, tất cả người tiêu dùng sẽ phải quan tâm đến cả loại tham chiếu (
atom
) và hàm bê tông cung cấp giá trị tiếp theo (inc
) - Trình tự có thể tận dụng nhiều chức năng clojure.core. 'Thủ công' xây dựng một danh sách các id ra khỏi một nguyên tử sẽ có một chút cồng kềnh:
(take 4 (repeatedly #(swap! _ inc)))
Tôi không thể thực hiện công việc. Có thể không?
'(lặp đi lặp lại gensym)'. Không phải những gì bạn đang tìm kiếm, tôi biết. Hoặc: '(liên tụC# (gensym" ")))', tạo ra các ký hiệu trông giống như số. – Mars
Hoặc cho số thực tế: '(nhiều lần # (Dài. (Str (gensym" "))))))' – Mars