1

私はいくつかの C# を F# に変換しようとしてきましたが、F# に比較的慣れていないため、うまくいきませんでした。

動作中の C# スニペットは次のとおりです。

static void doParallelForeach()
{
    // The sum of these elements is 40.
    int[] input = { 4, 1, 6, 2, 9, 5, 10, 3 };
    int sum = 0;

    Parallel.ForEach(
        input, 
        () => 0,   
        (n, loopState, localSum) => 
        {
            localSum += n;
            Console.WriteLine("Thread={0}, n={1}, localSum={2}", Thread.CurrentThread.ManagedThreadId, n, localSum);
            return localSum;
        },
        (localSum) => Interlocked.Add(ref sum, localSum)
    );
}

このコンパイラ エラーを発生させる F# のスニペットを次に示します。

let doParallelForeach =

let input:int[] = [|4; 1; 6; 2; 9; 5; 10; 3|]

let sum = 0

Parallel.ForEach

(
    input,

    (fun ()-> 0),

    (fun (n, loopState, localSum) ->
        localSum += n
        Console.WriteLine("Thread={0}, n={1}, localSum={2}", Thread.CurrentThread.ManagedThreadId, n, localSum);
        return localSum),

    (fun (localSum) -> Interlocked.Add(ref sum, localSum))

)

誰かが私が間違っていることを説明してもらえますか?

4

1 に答える 1