Как вычислить декартово произведение n последовательностей в F #?

ься с «функциями расширения» для модуля List. (Я потратил довольно много времени на разработку «mapfold» - в котором используется накопитель, такой как fold, но использовал его в качестве параметра для создания новых значений, таких как map, - потом обнаружил, что это то, чтоList.scan_left делает)

Для генерации тестовых данных мне нужно было создать перекрестное произведение из двух списков. Вот что я придумал:

///Perform cross product of two lists, return tuple
let crossproduct l1 l2 =
    let product lst v2 = List.map (fun v1 -> (v1, v2)) lst
    List.map_concat (product l1) l2

Это хорошо или уже есть какой-то лучший способ сделать это?

Тот же вопрос для этого:

///Perform cross product of three lists, return tuple
let crossproduct3 l1 l2 l3 =
    let tuplelist = crossproduct l1 l2 //not sure this is the best way...
    let product3 lst2 v3 = List.map (fun (v1, v2) -> (v1, v2, v3)) lst2
    List.map_concat (product3 tuplelist) l3

Ответы на вопрос(6)

Ваш ответ на вопрос