У меня очень простой вопрос, как выполнить операцию сложения для каждого из списков в списке списков, содержащих целые числа.
Итак, если бы я назвал эту функцию следующим образом:
add [[1;5] ; [4;3;7]];;
... он должен вернуть это:
-: int list = [6;14]
Я думал об этом коде, но он точно не работает ...
let rec add list = match list with
| [] -> []
| hd::tl -> (List.map(fun x -> x + List.hd) hd)::add(tl);;
Но этот, однако, делает:
let rec add list =
if (list = []) then []
else (List.map(fun x -> x+x) (List.hd list))::add(List.tl list);;
add [[1;3];[5;7]];;
... но он выполняет операцию сложения только над одним целым числом в списке списков с тем же самым целым числом, и да, я знаю почему; потому что я поставил: fun x -> x + x ... но разве функция map не должна также вычислять целые числа в списках вместе?
Я говорю это, потому что я использовал это в хвосте рекурсивный способ с помощью :: add (tl list) Кстати, это не работает должным образом, даже если я использую сопоставление с образцом ...
Итак, чтобы подвести итог, я требую, чтобы функция дала мне эти выходные данные:
-: int list = [6;14]
... с таким входным сигналом: add [[1; 5]; [4; 3; 7]] ;;
Может кто-нибудь помочь? Буду очень признателен!