Bonsoir,
Je me permets de venir vous solliciter pour avoir de l'aide sur d'éventuelles fonctions qui me permettrai de stocker dans une liste L1, une partie d'une liste L2, dont je veux les valeurs des indices variant de i à j.
Je vais essayer d'être plus clair : je souhaite faire cette fonction extraireLigne(L,D,F,K). Je voudrai stocker dans K une liste comportant les entiers de la liste L dont les indices varient de D à F. J'ai bien essayé d'utiliser le prédicat nth mais sans succès( certainement dû à mon incompétence en Prolog).
Pour info, voilà ce que j'ai tenté de faire :Dans mon exemple j'utilise write juste pour vérifier si le prédicat fonctionne(je n'insère pas le résultat dans une liste)
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 sudokuA(Vars):- %definition du domaine des variables length(Vars,Y), %Le domaine de definition varie entre 1 et la racine de la longueur de la liste %integer(F), F is sqrt(Y), write(F), fd_domain(Vars, 1,F), extraireLigne(Vars,1,5,E), %nieme(5,Vars,E), write(E). %fd_all_different() extraireLigne(L,D,F,K):- D==F,!. extraireLigne(L,D,F,K):- D<F,!, nth(D,L,K), write(K), D is D+1, extraireLigne(L,D,F,K). %On ajoute une contrainte disant que tous les chiffres d une ligne doivent etre differents
En fait le but est de résoudre un sudoku dont la taille est variable.( et là vous allez me dire : "oh non pas encore quelqu'un qui veut qu'on lui résolve son problème de sudoku").
Au passage j'aimerai savoir comment je peux transformer le float F en entier pour pouvoir l'utiliser dans le fd_domain.
Merci à ceux qui pourront me renseigner
Matt
PS : je travaille avec gprolog
Partager