2012-03-19 10 views
1

F#array2Dでは、最も機能的なコードを作成することはできません。現時点では、変更を加えて配列を返すときに、私の入力のArray2D.copyを行うことでこれを隠しています。すなわちF#のarray2Dに代わるより機能的な代替手段

let test (x : int[,]) = 
    let y = Array2D.copy x 
    y.[0,0] <- 3 

テストをより機能的にする良い方法はありますか?

答えて

2

Array2D moduleで常に高次関数を使用して、Array2Dを関数形式で使用することができます。特に、配列のインデックスのArray2D.mapi操作は、このタスクに適しています:

let test (xs: int[,]) = 
    xs |> Array2D.mapi (fun i j x -> if i=0 && j=0 then 3 else x) 

EDIT:

一般的に言って、あなただけの関数内で副作用を制限することができますので、あなたのtest機能は結構です。ネストされた配列の場合は、さらに注意する必要があります。しかし、制御された副作用を持つ独自の関数を書くことは、通常Array2Dの高次関数を使うよりも優れた性能を発揮します。