SVP je suis débutante en prolog qui peut m'aider pour écrire ce prédicat : c Urgent SVP
Définir un prédicat debut/3, tel que debut(L1,N,L2) est vrai si L2 contient les N premiers éléments de L1.
SVP je suis débutante en prolog qui peut m'aider pour écrire ce prédicat : c Urgent SVP
Définir un prédicat debut/3, tel que debut(L1,N,L2) est vrai si L2 contient les N premiers éléments de L1.
Tu dois avoir eu un cours de Prolog tout de même.
Comment est définie une liste en Prolog ?
mais je suis très en retard c pour ça que je demander l'aide :
j'ai écrit ce prédicat en prolog :
debut(L,X) :-append(X,[_], L),!.
debut(L,Y) :-append([_],T,L),debut(T,Y).
mai il ne donne pas ce que je voulu
si quelqu’un peut m'aider ça sera gentil
Très mauvaise excuse !!
Dans le cours, il y a du avoir une explication sur le parcours des listes non ?
Eh bien il faut compter le nombre de fois qu'on progresse dans la liste, à chaque on décrémente ou incrémente un compteur et quand on est arrivé à la bonne valeur (0 ou N) alors on identifie la valeur courante d'un accumulateur avec le résultat final attendu !
Il existe une autre méthode un peu plus compliquée.
Bon alors c'est mon jour de bonte !
La définition d'une liste en Prolog est celle-ci
L = [T | Q], ou T est le premier élément de la liste, et Q le reste de la liste, Q donc une liste (de la forme [A | B]) ou la liste vide (donc []).
A partir de cela, si on écrit [T|Q] on a accès au premier élément de la liste.
On veut les N premiers éléments de la liste, on introduit un compteur dans notre prédicat
Maintenant, quand doit-on s'arréter ? Lorsque N est égal à 0.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 % [T|Q] est la liste dont on veut les N premiers éléments % R est le résultat n_premiers([T|Q], N, R) :- % on va aller chercher les N-1 premiers éléments de Q % il faut que N soit plus grand que 0 N > 0, N1 is N-1, % on les aura avec le même predicat (appel récursif) n_premiers(Q, N1, R1), % maintenant on construit la liste résultat R % en mettant en T devant R1 R = [T|R1].
Si on veut 0 élément, quelque soit la liste fournie, on obtient une liste vide
Donc le prédicat d'arrêt est
Je ne donne que cette méthode, c'est la plus intéressante à mon avis.
Code : Sélectionner tout - Visualiser dans une fenêtre à part n_premiers(_, 0, []).
Partager