2010-06-19 4 views
2

List.map을 통해리스트를 반복하는 방법은 있습니까?ocaml List.map을 사용하여리스트 반복하기

필자는 List.map이 단일 함수와 목록을 취하여이 함수가 모든 요소에 적용되는 목록을 생성한다는 것을 알고 있습니다. 그러나 목록을 적용하고 목록의 목록을 생성하는 함수 목록이 있다면 어떻게 될까요?

+0

CS421을 사용하고 계십니까? –

답변

6

귀하의 질문은 명확하지 않지만, 이해하는 한, 귀하는 기능 목록과 가치 목록을 가지고 있습니다. 당신이 모든 요소에 모든 기능을 적용 할 경우에 당신이 쓸 수 있습니다 :이 경우

(* // To get one nested list (of results of all functions) for each element *) 
List.map (fun element -> 
    List.map (fun f -> f element) functions) inputs 

(* // To get one nested list (of results for all elements) for each function *) 
List.map (fun f -> 
    List.map (fun element -> f element) inputs) functions 

은 당신이 원하는 것이 아닙니다, 당신은 질문을 조금 (아마도 몇 가지 구체적인 예 도움이 될)를 명확히 할 수 있겠지?

+0

난 함수 기능의 목록과 값의 목록을 소요하고 모든 값으로 각 기능을 적용, 당신이 내 아이디어를 가지고 생각합니다. 결과는 모든 값에 대한 각 함수의 결과입니다. 예) [(...); (...); (...)] 함수 목록과 [1; 2; 3; 4] 값 목록 다음에 [[true, true, false false]; [거짓, 참, 참, 참]; [...]; [...]] – REALFREE

+0

나는 이것이 F # one이 아닌 Ocaml 질문이라고 생각 했습니까? 나는 OCaml에 연산자가 있다고 생각하지 않는다. – sashang

+0

@sashang : 수정 해 주셔서 고맙습니다. OCaml에 해당 연산자가 있는지 여부는 확실하지 않았습니다 (하지만 너무 유용하다고 생각했기 때문에 실수도 있었을 것입니다!). 나머지 답변은 정확해야합니다. –

0

이 작업을 시도 할 수 있습니다 :

let rec fmap fct_list list = match fct_list with 
    [] -> //you do nothing or raise sth 
    head::tail -> List.map head list :: fmap tail list;; 
+0

내가 이미 재귀 함수와 함께이 작업을 수행하는 방법을 알고 ..하지만 트릭은 내가 직접 재귀 함수를 사용하지만 // 나는 생각하지 않는다 OCaml의 – REALFREE

+1

주를 통해 할 수있다 List.map에서만 가능합니다. list.map2이 아마 당신은 List.iter, 또는 List.fold_left 또는 fold_right 등 – sashang

+0

코드를 코멘트하는 합법적 인 방법이 아니다 List.map – Dimitri

0

당신이 List.map2를 사용할 수 있습니까? 왜냐하면 이것은 간단합니다 :

let lista = [(fun x -> x + 1); (fun x -> x + 2); (fun x -> x + 3)];; 
let listb = [1; 1; 1];; 
let listc = List.map2 (fun a b -> (a b)) lista listb;; 

출력은 [2; 삼; 4]

편집 : 잠깐, 내가 당신의 문제를 잘못 읽은 것 같아요. 각 목록에 초기 목록에 적용된 함수 목록이 들어있는 목록 목록을 가져 오시겠습니까? 즉 위의 목록 및 목록에 대해 다음과 같이 표시됩니다.

[[2;2;2];[3;3;3];[4;4;4]] 

이 정보가 맞습니까?

+0

에 프로그램하지 않았다 때문에, 2 년 계속 것처럼 그것으로 다른 기능을 사용해야합니다 하지만 난 여러 list.map을 사용해야하고 목록을 통해 루프를 중첩 그러나 아직도이 솔루션은 하나 개의 요소에 각 기능을 적용하고, 각 요소에 대해 하나 개의 함수가 있어야합니다 – REALFREE

+0

잃었다. – Thelema

+0

그래, 그게 내 편집 내용이야. 문제는 제대로 말하지 않았으며 여러 가지 다른 방식으로 해석 될 수 있습니다. 나는 나의 초기 해석이 잘못되었다는 것을 깨달았지만, 나는 실제로 무엇이 실제로 요구되는지 명확하게 밝히지 않았다. –