我一直在寻找将F#代码块导入C#应用程序的解决方案(为了获得某些操作的计算速度)。因此,我将FSharpx.Core安装到MS Visual Studio Express 2013中的C#解决方案中。 就是这样......不知道如何继续: - )
有人可以用一些简单的代码帮助我 - 例如当我单击表单中的按钮时,减去变量v1和v2。
Form1.cs的
...
private void buttonCalcVars_Click(object sender, EventArgs e)
{
int sum = CallFSharpFunction(1,2);
}
// This should be some F# block of code
private int CallFSharpFunction(int a, int b)
{
let v1 = a;
let v2 = b;
// do some calculations
return result;
}
...
希望这是可能的, 谢谢!
答案 0 :(得分:0)
在使用F#之前,您可以在使用c#编写的应用程序中使用F#函数吗? 熟悉F#功能语言,例如,您可以在以下地址:http://msdn.microsoft.com/ru-ru/magazine/cc164244.aspx 但是在这里,在我看来,F#函数式语言有利于编写各种数学函数(请原谅我的重言式),但为什么要从面向对象语言中获取面包,为什么要将难以理解的代码用于F中的WinForms或WebForms控件页面#?因为我立即想知道如何从F#程序集中调用函数。只是想说,因为在编写代码时使用tipizaciâmi的函数式语言存在困难,在使用C#程序集的F#函数的情况下,这些困难只会增加。开始做生意。 创建一个项目,包括,例如,C#控制台应用程序和F#程序集。 在程序集中我们需要一个文件MyFunctions。 FS。在这里,我们描述了一些我们认为用函数式语言编写更容易的功能。例如,即使它是从RGB到YCbCr颜色空间的转换函数数组位图图像(这只是一个例子)。在F#中输入可以大致如下:
open System
let RGB_to_YCbCr (r : double,g : double,b : double) =
let y = 0.299 * r + 0.587 * g + 0.114 * b in
let Cb = (-0.1687) * r - 0.3313 * g + 0.5 * b + 128.0 in
let Cr = 0.5 * r - 0.4187 * g - 0.0813 * b + 128.0 in
(y,Cb,Cr);
let RGB_to_YCbCr_v (v : _ array) =
RGB_to_YCbCr (v.[0], v.[1], v.[2]);
let Process (image : _ array) =
let lenght = Array.length image in
let imageYCbCr = Array.create lenght (0.0, 0.0, 0.0) in
for index = 0 to lenght - 1 do
imageYCbCr.[index] <- RGB_to_YCbCr_v (image.[index])
done
imageYCbCr
在汇编之后,我们可以看到对功能的访问不仅具有奇怪的视图命名空间,而且如何使用它们还不清楚。请参阅我们可以使用Reflector的Assembly中函数的位置。 为了描述命名空间和类,您需要在#light之后立即添加以下行: 模块FSharp.Sample.MyFunctions 也就是说,下面写的所有函数都包含MyFunctions类fsharp.Core命名空间。 在项目再次之后,我们将看到在程序集中有一个清楚的fsharp.Core命名空间Sample,它具有类MyFunctions静态方法,我们已经在上面描述过了。 在我们的控制台应用程序中阅读更多内容,我们设置了对程序集的引用fsharp.core示例是我对F#的程序集的名称和fsharp.core -in命令,以使用F#类型Triple的类型(类)。并编写以下代码:
using System;
using FSharp.Sample;
namespace CSharp.Sample.Console
{
class Program
{
static void Main()
{
double[][] image = new double[1000][];
Random rand = new Random();
for (int i = 0; i < 1000; i ++ )
{
image[i] = new double[3];
image[i][0] = rand.Next();
image[i][1] = rand.Next();
image[i][2] = rand.Next();
}
foreach (var doubles in MyFunctions.Process(image))
{
System.Console.WriteLine(doubles);
}
}
}
}
最初我们指定使用fsharp.Core命名空间。在代码中,我们生成一个数据数组并将其传递给函数MyFunction。进程,将其转换为所选算法。我们作为一个数组类型返回“在Microsoft fsharp.core .. Tuple'3”。