ocaml используя List.map перебирать список - PullRequest
2 голосов
/ 19 июня 2010

есть ли способ перебрать список по списку через List.map?

Я знаю, что List.map берет одну функцию и список и создает список, который функция применяется ко всем элементам. Но что, если у меня есть список функций для применения списка и создания списка из списка?

Ответы [ 3 ]

6 голосов
/ 19 июня 2010

Ваш вопрос не очень понятен, однако, насколько я понимаю, у вас есть список функций и список значений. Если вы хотите применить все функции ко всем элементам, вы можете написать это:

(* // 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 голосов
/ 19 июня 2010

Вам разрешено использовать 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;3;4]

Редактировать: подождите, я думаю, что я прочитал вашу проблему неправильно.Вы хотите получить список списков, где каждый список содержит список функций, примененных к начальному списку?Другими словами, для списков и списков, приведенных выше, вы получите:

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

Это правильно?

0 голосов
/ 19 июня 2010

Вы можете попробовать это:

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;;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...