tôi đã viết chức năng này mà thực hiện điều này (dễ dàng hơn để hiển thị hơn giải thích):Cách Clojure thành ngữ nhất để viết cái này là gì?
(split 2 (list 1 2 3 4 5 6))
=> ((1 2) (2 3) (3 4) (4 5) (5 6))
(defn split [n xs]
(if (> (count xs) (dec n))
(cons (take n xs) (split n (rest xs)))
'()))
Tôi hiểu rằng trong Clojure danh sách không chỉ là cấu trúc lớp dữ liệu đầu tiên. Nó sẽ có ý nghĩa để viết cấu trúc dữ liệu này-thuyết bất khả tri? Và bất kể, việc triển khai của tôi có hiệu quả nhất hay không, làm thế nào tôi có thể làm cho nó hiệu quả hơn và/hoặc thành ngữ?
Cảm ơn!
Gọn gàng, nhờ đầu. Làm cho thay đổi duy nhất - đếm 'take n' chứ không phải là trình tự - để vòng lặp/recur phiên bản giảm thời gian từ 3000ms đến 20ms cho một phạm vi 10k ...Tôi sẽ phải nhớ rằng phần tiếp theo/phần còn lại trả về một chuỗi, trong đó đếm là O (n). –