سؤال

وأود أن التفاف الطبقة PriorityQueue جافا في كلوجر للاستخدام في جزء آخر من برنامجي. ما أحاول معرفة هو ما إذا كان هناك أي طريقة للقيام بذلك بطريقة lispy وجعل طابور أولوية غير قابل للتغيير. هل هناك أي وسائل جيدة للقيام بذلك، أو أنا فقط ستكون أفضل حالا باستخدام PriorityQueue كما بنية بيانات قابلة للتغيير؟

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

المحلول

وأنا لا أعتقد أن هناك وسيلة بسيطة للالتفاف بنية بيانات قابلة للتغيير باعتبارها واحدة غير قابلة للتغيير. هياكل البيانات الثابتة تصبح فعالة عند الإصدار الجديد يمكن تبادل البيانات مع الإصدار القديم بطرق ذكية، وأنا لا أرى حقا كيف يمكن القيام بذلك دون الوصول إلى الأجزاء الداخلية من PriorityQueue.

إذا كنت تريد حقا مستمرة طابور الأولوية هذا الموضوع قد كن مهتما. تلك يبدو أن الخطية وقت إدراج الرغم من ذلك، حتى إذا كان هذا هو المشكلة ربما عليك أن تنظر للتنفيذ آخر.

وتحرير: على الفكرة الثانية، وتنفيذ بسيط من طابور الأولوية المستمر هو فقط لتخزين (PRIO، قيمة) -pairs في مجموعة فرزها. شيء من هذا القبيل:

(defn make-pqueue []
  (sorted-set))

(defn pqueue-add [pq x prio]
  (conj pq [prio x]))

(defn pqueue-peek [pq]
  (first pq))

(defn pqueue-pop [pq]
  (let [top (first pq)]
    (disj pq top)))

وبطبيعة الحال، فإن رمز أعلاه يقتصر جدا (لا مداخل متعددة، على سبيل المثال) ولكنه يوضح هذه الفكرة.

نصائح أخرى

وأنت لا يمكن أن تجعل التلقائى الطبقة قابلة للتغيير غير قابل للتغيير. يمكن للمرء أن ندعو دائما الطبقة جافا مباشرة ويتحور ذلك.

لقوة ثبات يمكنك إما تنفيذه في كلوجر، أو توسيع الطبقة جافا ورمي الاستثناءات في كافة تطبيقات الطريقة قابلة للتغيير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top