我的数据按以下顺序排序:
([(x1,y1,z1);(x2,y2,z2);(x3,y3,z3);........;(xn,yn,zn)], e:int)
示例:我尝试创建一个列表[x1;x2;x3;....;xn;e]
,其中仅一次找到一个值。
我开始以下代码,但是遇到类型问题。
let rec verifie_doublons_liste i liste = match liste with
| [] -> false
| head::tail -> i = head || verifie_doublons_liste i tail
let rec existence_doublon liste = match liste with
| [] -> false
| head::tail -> (verifie_doublons_liste head tail) ||
existence_doublon tail
let premier_du_triplet (x,y,z) = x
let deuxieme_du_triplet (x,y,z) = y
let troisieme_du_triplet (x,y,z) = z
let rec extract_donnees l = match l with
| [] -> []
| (x,y,z)::r -> (extract_donnees r)@@(x::z::[])
let arrange donnees = match donnees with
| [],i -> i::[]
| (x,y,z)::[],i -> x::z::i::[]
| (x,y,z)::r,i -> (extract_donnees r)@@(x::z::i::[])
答案 0 :(得分:0)
基本上,您要提取元组列表中的第一个元素,并在末尾添加元素。
最简单的方法是使用List.map提取第一个元素
List.map premier_du_triplet
是一个函数,它将获取一个三元组列表,并提取每个元组的第一个元素。
然后您可以使用“ @”运算符在末尾添加e元素。
更有效和信息量更大的方法将是直接编写一个递归函数,例如 f ,它可以满足您的需求。
编写递归函数时,您需要问自己两件事
有了这些信息,您应该能够编写一个使用模式匹配来完成您想要的事情的递归函数
最简单的情况是
| [] -> [e]
(您只需在末尾添加e)
一般情况是
| h::t -> (premier_de_triplet h)::(f t)