5

C# 中没有内置矩阵函数,但 F# powerpack 中有。

与其使用第三方或开源 C# 库,我想知道在 F# 中滚动我自己的库,并将有用的部分暴露给 C#。

想知道是否有人已经想到这一点,或尝试过,以及这是否是一个好主意。

我应该将它公开为一个类,还是一组静态函数?

或者我应该创建一个 C# 包装类,并将该调用向下调用到 F#?还是让 F# 使用 C# 类作为输入和输出?

有什么想法吗?

感谢下面的Hath回答:您可以直接在 C# 中使用 F# 库(运算符也是如此!):

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();
    }
  }
}
4

2 回答 2

6

不能只引用c#中需要的f#库直接使用吗?

我做了类似的事情来引用 FSharp.Core.dll 来获取

Microsoft.FSharp.Math.BigInt class.

因此,您可能只需参考 FSharp.PowerPack.dll 即可获得

Microsoft.FSharp.Math.Matrix<A> class
于 2008-11-07T14:36:08.893 回答
0

XNA 框架中有非常好的 Matrix 类。我要么引用那个 dll,要么很可能使用反射器并将代码复制并粘贴到我自己的解决方案中。我知道它不能直接回答你的问题,而只是另一个想法......

于 2008-11-07T13:35:43.930 回答