2011-12-15 9 views
5

He pasado una buena hora buscando en Google y puedo encontrar varias listas, conjuntos y mapas inmutables de .NET. Sin embargo, no he podido encontrar un Vector inmutable persistente.¿Hay una biblioteca .net que tenga una clase vectorial inmutable persistente (como se encuentra en Clojure/Scala)?

Algo así como el vector inmóvil de Scala es lo que busco (y creo que es similar en Clojure). Debe ser invocable desde una biblioteca C#.

¿Existe tal cosa en Microsoft-land?

Respuesta

2

Puede consultar ClojureCLR implementation. Es una implementación del lenguaje Clojure sobre el motor de ejecución CLR/DLR. Supongo que no puede simplemente copiar & pegue el código en su proyecto, pero con poco trabajo puede extraer estructuras persistentes de datos específicos. Mira dentro de Clojure \ Clojure \ Lib para la implementación como PersistentVector.cs

Ido.

+0

que se ve bastante interesante, gracias. – Aled

1

Hay una implementación .NET (callable de una biblioteca C#) de vectores persistentes en el paquete FSharpX.Collections, también available en NuGet.

Aquí está el ejemplo de uso de la primera página del proyecto:

// 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 
Cuestiones relacionadas