Je suis très nouveau à sml/nj et je suis un peu perdu. J'ai essayé d'implémenter une fonction qui va chercher dans la liste des tuples qui ont des listes, par exemple val x = [(5,2, [9,8,7]), (3,4, [ 6,5,0]), (11, 12, [8,3,1])]. Je voudrais que ma fonction ajoute le premier élément du tuple à la nouvelle liste dès qu'il y aura une correspondance entre mon numéro cible et un nombre dans l'élément 3 du tuple. J'ai essayé plusieurs implémentations mais aucune ne fonctionne correctement jusqu'à maintenant.SML/NJ recherche dans la liste des tuples de la liste
type id = int* int* int list;
val b:id list = [(5,2,[9,8,7]), (3,4,[6,5,0]), (11, 12, [8,3,1])]
val number: int = 8;
val a: int list = nil;
fun findNum(nil) = a | findNum (x: id list) =
let val tem = hd(x)
val theList = #3tem
val i = #1tem
fun findMatch(nil) = a | findMatch(tem) =
if (number = hd(theList)) then i::a
else findMatch (tl(theList))
in findNum(tl(x))
end;
findNum(b);
Je sais que c'est mal écrit c'est pourquoi il continue de retourner la liste vide. Je me sens comme si je devais faire sinon else au lieu de let/in/end donc il va récursivement appeler le reste des tuples dans la liste. Mon problème est que je ne suis pas sûr de savoir comment le faire car si j'utilise if/else, je ne peux pas déclarer de valeur dans la fonction. J'apprécie toute suggestion ou suggestion.
Merci
Pourriez-vous ajouter un exemple simple d'entrée et de sortie souhaitée, par exemple pour l'entrée '[(5,2, [9,8,7]), (3,4, [6,5,0]), (11, 12, [8,3,1])] quelle sortie attendez-vous? – coder
Je m'attends à ce qu'il renvoie la liste des premiers éléments de tuples une fois que le nombre dans le troisième élément correspond. Cela devrait donc être [5, 11] dans ce cas. –
Merci beaucoup. –