Bonjour à tous,
Je souhaitais me faire une petite fonction qui coupe une liste en deux :
On a un nombre qui correspond à la longueur de la liste qu'on veut récupérer, la liste sur laquelle on travaille et les deux derniers paramètres sont les deux bouts de listes résultats gauche et droite (j'espère être clair ). Hors lors de l’exécution voilà ce que j'obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 tronquer_liste(_, [], [], []). tronquer_liste(0, Q, [], Q). tronquer_liste(N, [T | Q], X, R) :- N1 is N - 1, tronquer_liste(N1, Q, X, R), X = [T | X].
J'ai essayé plein de manières différentes pour essayer de bloquer l'appel de la fonction lorsque N est 0 mais sans succès. Le problème avec le fail c'est qu'il bloque tous le reste de mon programme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 26 3 Call: tronquer_liste(1,[pro101,pro102,pro103,pro104,pro105,pro106],_733,_734) ? 27 4 Call: _760 is 1-1 ? 27 4 Exit: 0 is 1-1 ? 28 4 Call: tronquer_liste(0,[pro102,pro103,pro104,pro105,pro106],_787,_788) ? 28 4 Exit: tronquer_liste(0,[pro102,pro103,pro104,pro105,pro106],[],[pro102,pro103,pro104,pro105,pro106]) ? 28 4 Redo: tronquer_liste(0,[pro102,pro103,pro104,pro105,pro106],[],[pro102,pro103,pro104,pro105,pro106]) ? 29 5 Call: _814 is 0-1 ? 29 5 Exit: -1 is 0-1 ? 30 5 Call: tronquer_liste(-1,[pro103,pro104,pro105,pro106],_841,_842) ? 31 6 Call: _868 is -1-1 ? 31 6 Exit: -2 is -1-1 ? 32 6 Call: tronquer_liste(-2,[pro104,pro105,pro106],_895,_896) ? 33 7 Call: _922 is -2-1 ? 33 7 Exit: -3 is -2-1 ? 34 7 Call: tronquer_liste(-3,[pro105,pro106],_949,_950) ? 35 8 Call: _976 is -3-1 ? 35 8 Exit: -4 is -3-1 ? 36 8 Call: tronquer_liste(-4,[pro106],_1003,_1004) ? 37 9 Call: _1030 is -4-1 ? 37 9 Exit: -5 is -4-1 ? 38 9 Call: tronquer_liste(-5,[],_1057,_1058) ? 38 9 Exit: tronquer_liste(-5,[],[],[]) ? 38 9 Redo: tronquer_liste(-5,[],[],[]) ? 38 9 Fail: tronquer_liste(-5,[],_1045,_1046) ? 36 8 Fail: tronquer_liste(-4,[pro106],_991,_992) ? 34 7 Fail: tronquer_liste(-3,[pro105,pro106],_937,_938) ? 32 6 Fail: tronquer_liste(-2,[pro104,pro105,pro106],_883,_884) ? 30 5 Fail: tronquer_liste(-1,[pro103,pro104,pro105,pro106],_829,_830) ? 28 4 Fail: tronquer_liste(0,[pro102,pro103,pro104,pro105,pro106],_775,_776) ? 26 3 Fail: tronquer_liste(1,[pro101,pro102,pro103,pro104,pro105,pro106],_721,_722) ?
Edit : et encore une fois c'est sous GNU Prolog que ça se passe. ^^'
Partager