2011-12-15 25 views
5

Tôi đã dành một giờ tốt googling, và có thể tìm thấy khác nhau .NET bất biến Lists, Sets và Maps. Tôi đã không thể tìm thấy một Vector bất biến dai dẳng mặc dù.Có thư viện .net có lớp Vector không thay đổi liên tục (như được tìm thấy trong Clojure/Scala) không?

Thứ gì đó giống như Vector bất biến của Scala là những gì tôi theo sau (và tôi tin nó tương tự như trong Clojure). Nó phải được gọi từ thư viện C#.

Điều đó có tồn tại trong Microsoft-land không?

Trả lời

2

Bạn có thể xem ClojureCLR implementation. Nó là một thực hiện của ngôn ngữ Clojure trên đầu trang của động cơ thực hiện CLR/DLR. Tôi đoán bạn không thể chỉ cần sao chép & dán mã vào dự án của bạn nhưng với ít công việc bạn có thể trích xuất các cấu trúc dữ liệu liên tục cụ thể. Nhìn bên trong Clojure \ Clojure \ Lib để triển khai như PersistentVector.cs

Ido.

+0

Điều đó có vẻ khá thú vị, cảm ơn. – Aled

1

Có triển khai .NET (callable từ thư viện C#) của vectơ liên tục trong gói FSharpX.Collections, cũng available trên NuGet.

Dưới đây là ví dụ sử dụng từ trang đầu của dự án:

// 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 
Các vấn đề liên quan