다음과 같이 두 가지 차원 목록 기능을 한 차원 목록에서 작동 기능, 다음 map
로 List.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);;
감사합니다. f를 초기 int리스트의 모든 열의 모든 i 번째 요소에서 호출 할 때 새로운 열의 i 번째 요소가 결과가되는 새 열을 어떻게 만들 수 있습니까? 예. 새로운 열의 세 번째 요소에 대해 [1; 2; 5]에서 함수 f를 호출합니다. 따라서 새로운 컬럼의 완전한 결과는 [f [1; 2; 3]; f [1; 2; 4]; f [1; 2; 5]. – user1836292
정확히 무슨 뜻인지 잘 모르겠습니다. 'f'의 정확한 정의는 무엇입니까? 원래 질문에서 f는': int -> int'이고, 이제는'f'가 다른 타입입니까? – thor
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