• Aucun résultat trouvé

Licence Informatique 3 e année Langages de Programmation II

N/A
N/A
Protected

Academic year: 2021

Partager "Licence Informatique 3 e année Langages de Programmation II"

Copied!
3
0
0

Texte intégral

(1)

Licence Informatique 3 e année Langages de Programmation II

Examen - 29/03/2007 - 2h00

Les notes de cours et de TD sont autorisées. Il sera tenu compte pour la notation de la qualité de rédaction et de la lisibilité des copies. Le barême est donné à titre indicatif.

1 Inversion (7 points)

Soitinversele prédicat d’inversion de liste défini de la façon suivante : inverse([],[]).

inverse([X|L],R) :- inverse(L,S),append(S,[X],R).

1. Soit le butinverse(L,[1,2]).. Construire l’arbre de recherche parcouru par l’interpréteur Prolog lors de la résolution de ce but (on pourra se limiter à une profondeur de 5 résolutions et ne pas détailler la résolution des prédicatsappend).

2. Quel problème pose ce but? Proposer une solution pour le résoudre.

2 Tri (8 points)

Écrire des prédicats permettant de trier une liste par tri-fusion.Rappel : le tri fusion consiste à couper une liste en deux, trier chacune des deux sous-listes puis fusionner les deux listes triées en respectant l’ordre.

[3,2,4,7,1,5,2]

[3,2,4,7] [1,5,2]

decoupe

[2,3,4,7] [1,2,5]

tri tri

[1,2,2,3,4,5,7]

fusion

1

(2)

3 Applatissement (5 points)

Écrire un prédicat aplat(+list,?list) qui réussit si la deuxième liste contient tous les éléments de la première sans imbrication. Par exemple, aplat([1,[2,3,[4,5]],6,7],R)doit renvoyerYES R=[1,2,3,4,5,6,7]. Re- marque : on pourra utiliser le prédicatlist(+term)qui réussit si le paramètre est une liste.

2

(3)

4 Correction

Exercice 1 : Inversion inverse([],[]) :- !.

inverse([X|L],R) :- inverse(L,S),append(S,[X],R).

Exercice 2 : Tri

decoupe(L,D,F):- length(L,N), LongF is N // 2, LongD is N - LongF, length(F,LongF), length(D,LongD), append(D,F,L).

Autre solution plus compliquée mais jolie trouvée dans une copie :

supprDer([X],[]). supprDer([X|R],[X|L]) :- supprDer(R,L).

decoupe2([],[],[]).

decoupe2([X],[X],[]).

decoupe2([H|X],[H|L1],L) :- last(X,D),supprDer(X,X1),decoupe2(X1,L1,L2), append(L2,[D],L).

Encore une autre solution moins compliquée trouvée dans une copie mais qui ne respecte pas l’ordre de la liste initiale :

decoupe3([],[],[]).

decoupe3([X],[X],[]).

decoupe3([A,B|C],[A|L1],[B|L2]) :- decoupe3(C,L1,L2).

fusion([],L,L).

fusion(L,[],L).

fusion([X1|Xs1],[X2|Xs2], [X1|L]):- X1 < X2, fusion(Xs1,[X2|Xs2],L).

fusion([X1|Xs1],[X2|Xs2], [X2|L]):- X1 >= X2,fusion([X1|Xs1],Xs2,L).

tri([],[]).

tri([X],[X]).

tri([X1,X2|Xs],L2) :- decoupe([X1,X2|Xs],D1,F1), tri(D1,D1triee), tri(F1,F1triee), fusion(D1triee,F1triee,L2).

Exercice 3 : Applatissement aplat([],[]).

aplat([X|L],[X|S]) :- \+list(X), aplat(L,S).

aplat([X|L],R) :- list(X), aplat(X,S), aplat(L,T), append(S,T,R).

3

Références

Documents relatifs

Par exemple, pour trouver un entier dans un arbre, on devra faire un parcours exhaustif dans le cas d'un arbre général, alors qu'un parcours dichotomique suffira pour un arbre

On peut par exemple considérer que la vitesse d'un bateau est celle du courant local, plus un pourcentage de celle du vent selon l'angle entre le cap du bateau et la direction du

En outre, les acronymes doivent avoir une méthode String getSigle() qui renvoie la chaine de caractères constituée par les premières lettres de chacun des mots (NB : la méthode

L'IDE doit permettre à l'utilisateur de créer une classe, de sélectionner une classe parmi les classes existantes, d'éditer une classe si elle a été sélectionnée, de compiler

S'il s'agit d'un itinéraire calculé entre deux lieux nommés par l'utilisateur, il possède aussi un lieu de départ qui est un lieu nommé.. Dans le cas où un itinéraire a été

De plus, une fois que le pilote automatique a pris la main pour la descente, le centre de contrôle spatial, sur Terre, doit valider la trajectoire de descente pour que le

Le scénario est le suivant : un chef de gare indique qu'un train a été constitué en fournissant son numéro, ce qui initialise l'état du train et entraine une modification interne

Question 0 : Le passager du véhicule peut donner une destination, demander le départ, demander l'arrêt (le véhicule s'arrête dès que possible), et demander à ce que le véhicule