Я хотел бы узнать, как написать функцию, которая бы принимала два параметра, то есть a 'и b' (которые являются функциями), а также список списков;
И затем, если сумма элементов в любом списке в списке int-списков (я имею в виду целые числа) является нечетным числом, она будет выполнять операцию умножения - функцию a '(мульт. с тем же целым числом -> x * x), над каждым элементом в этом списке.
В противном случае, если сумма элементов в любом списке в списке int-списков будет четной, будет выполнена операция сложения - функция b '(добавить с то же самое целое число -> x + x) для каждого из элементов в этом списке.
Таким образом, вызов функции со входом будет таким:
func a b [[1;3];[8;3]];;
. .. и тогда результат должен выглядеть следующим образом:
- : int list list = [[2; 6]; [64; 9]]
Сумма элементов в первом списке является четным числом, поэтому первый список будет добавлен, а сумма элементов во втором списке будет нечетной число, что означает, что второй список будет м ultiplied.
Я написал эту функцию в Ocaml как упражнение, и я действительно изо всех сил пытаюсь понять этот язык; Я хотел бы знать, что я делаю неправильно ... Кроме того, стратеги c помощь будет высоко ценится! то есть объяснение того, как все на самом деле работает здесь в Ocaml, хотя я не совсем новичок ie для Ocaml, я уже многое узнал о хвостовых рекурсивных функциях, это просто обмен параметрами между функции, которые меня беспокоят.
Хорошо, вот код:
let a = List.map (List.fold_left ( + ) 0)
let b = List.map (List.fold_left ( * ) 0)
let rec func a b lists = if lists = [] then []
else if ((List.map (List.fold_left ( + ) 0)) mod 2 = 0) then List.map
(List.fold_left ( + ) 0)
else List.map (List.fold_left ( * ) 0)
(* Function call: *)
func (fun x -> x*x) (fun x -> x+x) [[1;3];[5;7]];;