简体   繁体   中英

ocaml using List.map iterate over list

is there a way to iterate list over the list through List.map?

I know List.map takes single function and list and produce a list that the function applies to all elements. But what if i have a list of function to apply a list and produce list of the list ?

Your question is not very clear, however as far as I understand it, you have a list of functions and a list of values. If you want to apply all functions to all elements then you can write this:

(* // 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

In case this is not what you wanted, could you try clarifying the question a little bit (perhaps some concrete example would help)?

You can try this :

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;;

Are you allowed to use List.map2? Because then this is simple:

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;;

The output would be [2; 3; 4]

Edit: wait, I think I read your problem wrong. You want to get a list of lists, where each list contains a list of a function applied to the initial list? In other words, for the lista and listb above, you'd get:

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

Is this correct?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM