2008-11-07 10 views
5

В C# нет встроенных матричных функций, но они есть в F # powerpack.Об использовании F # для создания сборки матрицы, пригодной для использования с C#

Вместо использования сторонней библиотеки с открытым исходным кодом C#, мне интересно, как скопировать мой собственный файл в F # и разоблачить полезные биты на C#.

Чувствовалось, что об этом кто-то уже подумал или попробовал, и является ли это хорошей идеей.

Должен ли я подвергать его классу или нагрузке статических функций?

Или мне нужно создать класс оболочки C# и вызвать этот вызов до F #? Или F # использует класс C# для ввода и вывода?

Любые мысли?

Ответ благодаря Hath ниже: вы можете использовать F # библиотеки непосредственно в C# (операторы, как хорошо!):

using System; 
using System.Text; 
using Microsoft.FSharp.Math; 

namespace CSharp 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 

     double[,] x = { { 1.0, 2.0 }, { 4.0, 5.0 } }; 
     double[,] y = { { 1.0, 2.0 }, { 7.0, 8.0 } }; 
     Matrix<double> m1 = MatrixModule.of_array2(x); 
     Matrix<double> m2 = MatrixModule.of_array2(y); 
     var mp = m1 * m2; 

     var output = mp.ToArray2(); 
     Console.WriteLine(output.StringIt()); 

     Console.ReadKey(); 
    } 
    } 

    public static class Extensions 
    { 
    public static string StringIt(this double[,] array) 
    { 
     var sb = new StringBuilder(); 
     for (int r = 0; r < array.Length/array.Rank; r++) 
     { 
      for (int c = 0; c < array.Rank; c++) 
      { 
       if (c > 0) sb.Append("\t"); 
       sb.Append(array[r, c].ToString()); 
      } 
      sb.AppendLine(); 
     } 
     return sb.ToString(); 
    } 
    } 
} 

ответ

6

Не могли бы вы просто ссылаться на библиотеку f #, которая вам нужна в C#, и использовать ее напрямую?

Я сделал подобную вещь для ссылки на FSharp.Core.dll, чтобы получить на

Microsoft.FSharp.Math.BigInt class. 

Таким образом, вы, вероятно, можете просто ссылаться на FSharp.PowerPack.dll, чтобы получить на

Microsoft.FSharp.Math.Matrix<A> class 
+0

Отличная идея. Я попробую, хотя я подозреваю, что я не получу операторов по этой цене. – Benjol 2008-11-09 08:08:28

0

Есть очень хорошие Матричные классы в XNA Framework. Я бы либо ссылался на эту DLL, либо, скорее всего, использовал рефлектор и копировал и вставлял код в свое собственное решение. Я знаю, что это не отвечает на ваш вопрос напрямую, а просто на другую идею ....

+0

Эти матрицы являются небольшими для работы с трансформирующей графикой. – cfeduke 2008-11-07 14:38:53