Об использовании F # для создания сборки Matrix, используемой из C # - PullRequest
5 голосов
/ 07 ноября 2008

В C # нет встроенных матричных функций, но есть в F # powerpack.

Вместо того, чтобы использовать стороннюю библиотеку 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();
    }
  }
}

Ответы [ 2 ]

6 голосов
/ 07 ноября 2008

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

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

Microsoft.FSharp.Math.BigInt class.

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

Microsoft.FSharp.Math.Matrix<A> class
0 голосов
/ 07 ноября 2008

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

...