2014-10-30 2 views
2

(int list list) x = [[1;1;1]; [2;2;2]; [3;4;5]] 및 함수 f가 있다고 가정합니다. 결과는 [f [1;1;1]; f [2;2;2]; f[3;4;5]].이어야합니다. 내장 된 List.map은 int 목록에서만 작동하지만 int 목록 목록에서는 작동하지 않습니다.이 새 열의 i 번째 항목은 각 항목에서 i 번째 요소를 입력으로 사용하는 함수 f에 의해 계산됩니다 열을 선택하고 새 요소를 만듭니다.List.map을 사용하여 int 목록에 함수를 적용하려면 어떻게해야합니까?

let newList x f = List.map f x (* 이것은 내가 알고있는 유일한지도 기능은 *)

답변

1

다음과 같이 두 가지 차원 목록 기능을 한 차원 목록에서 작동 기능, 다음 mapList.map f을 사용할 수 있습니다 :

let x = [[1;1;1]; [2;2;2]; [3;4;5]];; 
let f x = x + 1;; 
List.map (List.map f) x;; 

출력 :

- : int list list = [[2; 2; 2]; [3; 3; 3]; [4; 5; 6]] 

my 함수는 두 개의 인수, 즉 int리스트리스트와 함수 f를 입력으로 취합니다. 새로운 int리스트를 출력합니다. 입력 = m = [[x1; x2; x3]; [y1; y2; y3]; [z1; z2; z3]] 및 함수 f 출력 = [f [x1; y1; z1]; f [x2; y2; z2]; F [X3, Y3, Z3는]

그것은 당신이 당신의 2 차원 배열을 (https://stackoverflow.com/a/3989823/4196578)를 바꾸어 다음 f을지도하고 싶었다 것으로 보인다. 이 경우 다음을 수행 할 수 있습니다.

let rec transpose list = match list with 
| []    -> [] 
| [] :: xss -> transpose xss 
| (x::xs) :: xss -> 
    (x :: List.map List.hd xss) :: transpose (xs :: List.map List.tl xss);; 

let myfunc m f = List.map f (transpose m);; 
+0

감사합니다. f를 초기 int리스트의 모든 열의 모든 i 번째 요소에서 호출 할 때 새로운 열의 i 번째 요소가 결과가되는 새 열을 어떻게 만들 수 있습니까? 예. 새로운 열의 세 번째 요소에 대해 [1; 2; 5]에서 함수 f를 호출합니다. 따라서 새로운 컬럼의 완전한 결과는 [f [1; 2; 3]; f [1; 2; 4]; f [1; 2; 5]. – user1836292

+0

정확히 무슨 뜻인지 잘 모르겠습니다. 'f'의 정확한 정의는 무엇입니까? 원래 질문에서 f는': int -> int'이고, 이제는'f'가 다른 타입입니까? – thor

+0

int리스트리스트가 있다고 가정합니다. m = [[x1; x2; x3]; [y1; y2; y3]; [z1; z2; z3]]. 어떻게 새 int 목록을 만들 수 m '= [[x1; y1; z1]; [x2; y2; z2]; [x3; y3; z3]] 그런 다음 List.map을 사용하여 함수 f를 적용하여 result = [f [x1; y1; z1]; f [x2; y2; z2]; f [x3; y3; z3]]? – user1836292

관련 문제