c# - 关于使用 F# 创建可从 C# 使用的 Matrix 程序集

标签 c# f# language-interoperability

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

最佳答案

能不能直接在c#中引用自己需要的f#库直接使用?

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

Microsoft.FSharp.Math.BigInt class.

因此,您可能只需引用 FSharp.PowerPack.dll 即可获取

Microsoft.FSharp.Math.Matrix<A> class

关于c# - 关于使用 F# 创建可从 C# 使用的 Matrix 程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/271966/

相关文章:

c# - 带有 Mono 的 Log4Net 缺少文件名和行号

C# 启动的线程比预期的多

lambda - F# 表达式仅在泛型内自动从函数转换?

java - 通过 Java 反射找到 Scala 类型的伴随对象的可靠方法是什么?

c# - C#中的替代内联接口(interface)实现

f# - 为什么 F# 推断我的函数实现了 IComparable?

f# - 错误 FS0001 : The type 'string -> seq<unit>' is not compatible with the type 'seq<' a>'

ios - 在 Objective-c 上使用静态 Swift 方法时出现 "No known class method for selector"

enums - 跨多种语言统一枚举

c# - 在单台计算机上进行套接字编程?