Как видно из названия, я хочу использовать сгиб.Если я правильно понимаю, раньше он применял функцию к каждому элементу в списке.Это то, что я хочу сделать с моей функцией, но я не знаю, как ее отформатировать.
Вот функция, которую я хочу использовать со сложением:
let pairing list =
let rec aux counter length paired list = match list with
| [] -> paired
| [head] -> paired
| head :: head' :: tail -> if counter = length then aux (counter-1) length ((head, head) :: paired) (head :: head' :: tail) else aux counter length ((head, head') :: paired) (head' :: tail)
in List.rev(aux (List.length(listheads list)) (List.length(listheads list)) [] (listheads list));;
Что она делаетэто возвращает список всех элементов в списке в паре вместе.
Например, если мой список [3;4;2]
, он должен вернуть
[(3,3); (3,4); (3,2); (4,3); (4,4); (4,2); (2,3); (2,4); (2,2)]
В настоящее время он возвращает только [(3,3); (3,4); (3,2)]
, поскольку функция применяется только к первому элементуиз списка.
Вот все вспомогательные функции:
let rec member list x = match list with
| [] -> false
| head :: tail -> head = x || member tail x
let head_list list =
let rec aux l1 list = match list with
| [] -> l1
| (x,y) :: tail -> aux (x :: l1) tail
in List.rev (aux [] list);;
let head'_list list =
let rec aux l2 list = match list with
| [] -> l2
| (x,y) :: tail -> aux (y :: l2) tail
in List.rev (aux [] list);;
let listheads list =
let rec aux returnlist l1 l2 = match l1 with
| [] -> returnlist
| head :: tail -> if member l2 head = true && member returnlist head = false then aux (head :: returnlist) tail l2 else aux returnlist tail l2
in List.rev(aux [] (head_list list) (head'_list list));;
Что делает listheads
, это займет мой исходный список (скажем [(3,4); (4,2); (2,3); (4,7); (9,4)]
), используйте head_list
и head'_list
вчтобы определить, какие целые числа находятся в позиции head
и head'
в кортеже, и поместить их в список (в случае, который я дал, [3;4;2]
).
Я знаю, что fold
принимает в качестве аргументов функцию, пустой список и список, но я не знаю, как использовать сопряжение со сложением.