Quelle est la meilleure façon d'obtenir un type de données de file d'attente immuable simple et efficace dans Clojure?File d'attente immuable dans Clojure
Il suffit de deux opérations, enqueue et dequeue avec la sémantique habituelle. Je considérais les listes et les vecteurs bien sûr, mais je comprends qu'ils ont des performances relativement médiocres (c'est-à-dire O (n) ou pire) pour les modifications à la fin et au début respectivement - donc pas idéal pour les files d'attente!
Idéalement, je voudrais une structure de données persistante appropriée avec O (log n) pour les enqueue et les opérations dequeue.
Pour éviter à quelqu'un d'écrire sur la façon dont les listes peuvent être utilisées pour implémenter des piles push/pop (comme je l'ai presque fait), n'oubliez pas la question à propos de * queues *. :-) –
Juste remarqué il y a une classe appelée PersistentQueue dans la dernière version 1.2 Clojure Java source .... peut être la réponse à ma propre question – mikera
Il a été là depuis toujours (juste vérifié avec 1.1, mais je pense qu'il est plus vieux que ça). Notez qu'il n'y a pas de fonction usine ni de syntaxe de lecteur fournie par défaut; utilisez 'clojure.lang.PersistentQueue/EMPTY' pour obtenir une instance vide. Puis 'conj',' pop' & 'peek' fonctionnent comme ils le devraient avec une file d'attente. Voir par exemple ma réponse à cette question: http://stackoverflow.com/questions/2760017 pour du code écrit avec 'c.l.PQ' et' LinkedBlockingQueue' de Java. –