2012-03-19 2 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) 

편집 :

일반적으로, 당신은 단지 함수 내에서 부작용을 제한 할 수 있기 때문에 당신의 test 기능이 괜찮습니다. 중첩 된 배열의 경우 더욱 신중해야합니다. 그러나 제어 된 부작용이있는 자신의 함수를 작성하면 보통 Array2D의 고차 함수를 사용할 때보 다 성능이 향상됩니다.