2017-10-03 8 views
2

Je veux convertir la liste de tuple en tuple de liste, et la première liste de tuple est constituée du premier élément de l'élément original tuple. Par exempleconvertir la liste de tuple en tuple de liste dans OCaml

convert [(1,2);(3,4);(5,6)] = ([1;3;5],[2;4;6]) 

comme ça.

J'ai essayé plusieurs fois et réussi à obtenir [1; 3; 5] en suivant le code ci-dessous.

let rec convert lst = 
    match lst with 
    |[]->[] 
    |(a,b)::tl->a::(convert tl) 

Cependant, je ne sais pas comment obtenir deuxième élément de la liste des tuple [2, 4, 6] et comment les fusionner en un seul tuple.

+0

La solution sur laquelle vous travaillez ne sera pas récursive et il existe un moyen de le faire de manière récursive. Essayez de finir le vôtre avec l'aide de la réponse de @ PatJ, puis essayez de le faire en queue récursive, c'est en fait facile et une bonne formation. ;-) – Lhooq

Répondre

4

Le moyen le plus simple consiste à utiliser la bibliothèque standard List.split qui fait exactement ce que vous voulez que votre fonction convert fasse. Maintenant, si cela fait partie d'un exercice, je ne vais pas vous donner la solution complète, mais voici quelques conseils.

D'abord, vous devez retourner un tuple de liste. Évidemment, la correspondance de la liste vide doit renvoyer une paire de listes vides.

Maintenant, en ce qui concerne la partie difficile, en supposant que vous avez (a,b)::tl, obtenir d'abord est évidemment une chose à faire. Que pouvez-vous faire si vous écrivez let (tla,tlb) = convert tl? Pouvez-vous le résoudre maintenant?

+0

J'ai essayé d'obtenir cela environ une heure et enfin le résoudre! Merci beaucoup – dongsu