2011-12-15 20 views
5

Ho passato una buona ora su google, e posso trovare varie liste, serie e mappe immutabili .NET. Tuttavia non sono stato in grado di trovare un Vettore immutabile persistente.Esiste una libreria .net che ha una classe Vector immutabile persistente (come trovata in Clojure/Scala)?

Qualcosa come il Vettore immutabile di Scala è quello che sto cercando (e credo che sia simile in Clojure). Deve essere richiamabile da una libreria C#.

Esiste una cosa del genere in Microsoft-land?

risposta

2

È possibile controllare ClojureCLR implementation. È un'implementazione del linguaggio Clojure in aggiunta al motore di esecuzione CLR/DLR. Immagino che non puoi semplicemente copiare & incollare il codice nel tuo progetto ma con poco lavoro puoi estrarre specifiche strutture di dati persistenti. Guardare dentro Clojure \ Clojure \ Lib per l'implementazione come PersistentVector.cs

Ido.

+0

Questo sembra piuttosto interessante, grazie. – Aled

1

C'è un'implementazione .NET (callable da una libreria C#) di vettori persistenti nel pacchetto FSharpX.Collections, anche available su NuGet.

Ecco l'esempio di utilizzo dalla prima pagina del progetto:

// Create an empty PersistentVector and add some elements 
PersistentVector<string> vector = 
    PersistentVector<string>.Empty() 
     .Conj("hello") 
     .Conj("world") 
     .Conj("!"); 

PersistentVector<string> vector2 = vector.Conj("!!!").Update(0,"hi"); 

Console.WriteLine(vector2[0]); // hi 
Console.WriteLine(vector[0]); // hello 
Console.WriteLine(vector2[3]); // !!! 

Console.WriteLine(vector.Length); // 3 
Console.WriteLine(vector2.Length); // 4 

// remove the last element from a PersistentVector 
PersistentVector<string> vector3 = vector2.Initial; 

Console.WriteLine(vector3.Length); // 3 
Problemi correlati