2010-07-08 25 views
10

Clojure ha analoghi transitori per alcune delle sue strutture dati persistenti, vettori, mappe e insiemi. Per i vettori, ci sono pop! e conj! funzioni analoghe a pop e conj per vettori persistenti, ma non peek!.Perché non c'è sbirciatina! funzione per i vettori transitori clojure?

C'è una ragione tecnica che rende un'efficace attuazione della peek! impossibile? O semplicemente non è necessario nella maggior parte dei casi d'uso per i vettori di transito? Posso sempre fare

(defn peek! [tvec] (get tvec (dec (count tvec)))) 

Ma sembra strano che non ci sia una soluzione integrata.

risposta

5

Questa è davvero una questione di design migliore regia al GGroup, ma FWIW, ho indagare peek/peek! qualche tempo fa e fornendo peek! sembra essere una semplice questione di creazione di una nuova interfaccia clojure.lang.ITransientStack parallelo clojure.lang.IPersistentStack e avendo vettori transitori implementare esso.

La mia ipotesi è che se una tale interfaccia non è già disponibile (e usato da transitori), è probabilmente una questione di priorità. Un'implementazione dello stack veloce a thread singolo è già disponibile in Clojure nel formato java.util.Stack, quindi non ci perdiamo molte funzionalità qui; la convenienza sintattica e la facile conversione a vettori persistenti probabilmente si verificheranno con Clojure-in-Clojure.

(Quando il ritorno sull'impegno investito è elevato, i miglioramenti al lato Java di Clojure hanno senso anche se l'obiettivo finale è di eliminare la parte rilevante della base di codici Java e sostituirla con un'implementazione in Clojure. i rendimenti attesi sono più bassi, potrebbe essere più logico attendersi che i protocolli vengano utilizzati in modo più pervasivo, ecc. Il set attualmente disponibile di funzioni per la gestione dei transienti è sufficiente per le esigenze di Clojure e non sono sicuro che ci sia mai stato il peek! GGroup - come per #clojure, mi ricordo una conversazione rilevante - in modo che il ritorno è probabilmente giudicato basso ... si potrebbe avviare una movimenti di base per cambiare questo, però :-))

+0

ringrazio molto, questo. aiutato. Non ho un disperato bisogno di dare un'occhiata! funzione, ma se questo cambia, posso pensare di iniziare la campagna di base. Per ora non vorrei disturbare il nostro saggio BDFL oi suoi luogotenenti. –

Problemi correlati