27 iunie 2010

Prolog

parent(andrew, bob).
parent(andrew, beth).
parent(bob, carlos).
parent(beth, cindy).

grandparent(X, Y) :- parent(X, Z), parent(Z, Y).

mylast(X, [X]).
mylast(X, [_|T]) :- mylast(X, T).

Determinati penultimul element al unei liste. Exemplu:
?- before_last(X, [1, 2, 3]). X = 2
before_last(X, [X,Y]).
before_last(X, [_|T]) :- before_last(X, T).

Determinati elementul de indice k dintr-o lista. Exemplu:
?- kth(X, 3, [4, 3, 2]). X = 2
kth(X,1,[X|T]).
kth(X,K,[Y|L]) :- Z is K-1 , kth(X,Z,L).

Determinati lungimea unei liste. Exemplu:
?- len(X, [1, 2, 3]). X = 3
len(0, []).
len(X, [H|T]) :- len(Z, T) , X is Z+1.

Concatenati doua liste. Exemplu:
?- concat([1, 2], [3], L). L = [1, 2, 3]
concat([], L, L).
concat([H|T],X,[H|L]) :- concat(T, X, L).

Inversati o lista. Exemplu:
?- rev([1, 2, 3], L). L = [3, 2, 1]
put(X,L,V) :- concat(L,[X],V).

inver([],[]).
inver([H|T], L) :- inver(T,B) , put(H,B,L).

Niciun comentariu: