سؤال

في كلوجر، ماذا سيكون اجمل طريقة لجعل نافذة انزلاق أكثر من (محدود، وليس كبير جدا) يليها؟ يجب أن تستخدم فقط drop وtake وتتبع المؤشر الحالي أو هل هناك طريقة أجمل أنا في عداد المفقودين؟

هل كانت مفيدة؟

المحلول

وأعتقد أن مع الخطوة 1 تقوم به:

user=> (partition 3 1 [3 1 4 1 5 9])
((3 1 4) (1 4 1) (4 1 5) (1 5 9))

نصائح أخرى

إذا كنت تريد أن تعمل على النوافذ، كما يمكن أن تكون مريحة للقيام بذلك مع خريطة:

user=> (def a [3 1 4 1 5 9])
user=> (map (partial apply +) (partition 3 1 a))
(8 6 10 15)
user=> (map + a (next a) (nnext a))
(8 6 10 15)

لم أكن أعرف partition يمكن أن تفعل هذا حتى أستطيع تنفيذه بهذه الطريقة

(defn sliding-window [seq length]
  (loop [result ()
         remaining seq]
    (let [chunk (take length remaining)]
      (if (< (count chunk) length)
        (reverse result)
        (recur (cons chunk result) (rest remaining))))))
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top