Я хочу написать функцию, которая дает декартово произведение двух последовательностей, это то, что я сделал, но я подумал, что может быть интересно иметь меньшую сложность с тем, что я хочу просмотреть один раз первую последовательность s1 и n раз вторую, используя картуи затем добавьте все результаты:
`let cartesian_product a b =
let na = length a in
let nb = length b in
init
(na * nb)
(fun j -> let i = j / nb in
at a i, at b (j - i*nb))
`
это то, что я сделал на данный момент:
`let rec cartesian_product a b =
let rec aux x b () = match b () with
| Nil -> Nil
| Cons(e, b) -> Cons ((x, e), aux x b)
in
match a () with
| Nil -> nil
| Cons (x, a) -> append (aux x b) (cartesian_product a b)`
но я не использовал карту (есть ли лучший способ дляделает это) ??