c#F#에서 lambda 표현식 호출

4357 단어 lambda
c#에서 F# 사용자 정의 라이브러리를 호출하면 F# 함수가 Lambda를 함수 매개 변수로 사용하고 C#에서 lambda 매개 변수는 FSharpFunc> 대상을 생성할 수 있습니다. C#의 lambda 표현식을 직접 실참으로 호출할 수 없습니다. 우리는 lambda 표달식을 FSharpFunc> 대상으로 변환할 수 있습니다. 다음은 lambd 표현식을 FSharpFunc 대상으로 변환하는 방법입니다.
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.FSharp.Core;
namespace XZL.FSharpHelp
{
    public class FuncToFSharpFunc
    {
        public static FSharpFunc<T1, TResult> Create<T1, TResult>(Func<T1, TResult> func)
        {
            Converter<T1, TResult> conv = value1 => func(value1);
            return FSharpFunc<T1, TResult>.FromConverter(conv);
        }
        public static FSharpFunc<T1, FSharpFunc<T2, TResult>> Create<T1, T2, TResult>(Func<T1, T2, TResult> func)
        {
            Converter<T1, FSharpFunc<T2, TResult>> conv = value1 =>
            {
                return Create<T2, TResult>(value2 => func(value1, value2));
            };
            return FSharpFunc<T1, FSharpFunc<T2, TResult>>.FromConverter(conv);
        }
        public static FSharpFunc<T1, FSharpFunc<T2, FSharpFunc<T3, TResult>>> Create<T1, T2, T3, TResult>(Func<T1, T2, T3, TResult> func)
        {
            Converter<T1, FSharpFunc<T2, FSharpFunc<T3, TResult>>> conv = value1 =>
                {
                    return Create<T2, T3, TResult>((value2, value3) => func(value1, value2, value3));
                };
            return FSharpFunc<T1, FSharpFunc<T2, FSharpFunc<T3, TResult>>>.FromConverter(conv);
        }
    }
}

다음은 예를 들어 사용법을 설명합니다.
먼저 F#을 사용하여 lambda 매개변수를 함수로 다음과 같이 정의합니다.
 let Random(row:int) (col:int) f = Array2D.init row col f

C#에서 이 F# 함수 매개 변수를 임의 2D 배열로 호출합니다.
1 Random r = new Random();
2 Func<int, int, double> func = (i, j) => r.NextDouble();
3 var f = FuncToFSharpFunc.Create<int, int, double>(func);
4 double[,] c = MatrixMod.Random<double>(4, 4, f);

좋은 웹페이지 즐겨찾기