'Added Prolog lists small excercises;'
This commit is contained in:
parent
773b4b5287
commit
a3678c44b3
49
04_Prolog/in_class/ex2_1.pl
Normal file
49
04_Prolog/in_class/ex2_1.pl
Normal file
@ -0,0 +1,49 @@
|
||||
L2 podstawia się lista będąca odwróceniem listy L1:
|
||||
?- L1 = [1, 2, 3, 4], L1 = [A, B, C, D], L2 = [D, C, B, A].
|
||||
|
||||
|
||||
Najważniejsze z nich to:
|
||||
member(X, L) spełniony, gdy X jest elementem listy L;
|
||||
append(L1, L2, L3) spełniony, gdy lista L3 jest połączeniem list L1 i L2;
|
||||
select(X, L1, L2) spełniony, gdy lista L2 jest listą pozostałą z listy L1 po wyjęciu z niej elementu X.
|
||||
|
||||
|
||||
|
||||
?- member(X, [a, b, c]).
|
||||
X = a ;
|
||||
X = b ;
|
||||
X = c.
|
||||
|
||||
|
||||
|
||||
?- append([1, 2], [3, 4, 5], X).
|
||||
X = [1, 2, 3, 4, 5].
|
||||
|
||||
|
||||
|
||||
?- append(X, Y, [a, b, c]).
|
||||
|
||||
|
||||
|
||||
Podobnie predykat select może wyjmować elementy z listy ale i wkładać je do listy:
|
||||
?- select(X, [1, 2, 3], L).
|
||||
|
||||
?- select(a, L, [1, 2]).
|
||||
|
||||
|
||||
definicje takich uniwersalnych predykatów są w Prologu krótkie i proste do zrozumienia:
|
||||
|
||||
member(X, [X | _]).
|
||||
member(X, [_ | Y]) :- member(X, Y).
|
||||
|
||||
append([], X, X).
|
||||
append([X | Y1], Y2, [X | Z]) :- append(Y1, Y2, Z).
|
||||
|
||||
select(X, [X | Y], Y).
|
||||
select(X, [Y | Z1], [Y | Z2]) :- select(X, Z1, Z2).
|
||||
|
||||
|
||||
Powyższe klauzule są formalnie zapisanymi definicjami jakie możemy wyrazić następująco w języku polskim:
|
||||
* X jest elementem listy o głowie X oraz jeśli X jest elementem listy Y, to X jest elementem listy o ogonie Y;
|
||||
* połączeniem listy pustej z dowolną listą X jest lista X oraz jeśli Z jest połączeniem list Y1 i Y2, to lista o głowie X i ogonie Z jest połączeniem listy o głowie X i ogonie Y1 z listą Y2;
|
||||
* po wyjęciu elementu z listy o głowie X i ogonie Y pozostaje lista Y oraz jeśli lista Z2 powstaje z listy Z1 przez wyjęcie elementu X, to lista o głowie Y i ogonie Z2 powstaje z listy o głowie Y i ogonie Z1 przez wyjęcie z niej elementu X.
|
49
04_Prolog/in_class/ex2_2.pl
Normal file
49
04_Prolog/in_class/ex2_2.pl
Normal file
@ -0,0 +1,49 @@
|
||||
list_length([], 0).
|
||||
list_length([_ | L], N) :-
|
||||
list_length(L, N1),
|
||||
N is N1 + 1.
|
||||
%?- list_length([hello, world], NL).
|
||||
|
||||
|
||||
list_member(X,[X|_]).
|
||||
list_member(X,[_|TAIL]) :- list_member(X,TAIL).
|
||||
%?- list_member(hello, [hello, world]).
|
||||
|
||||
|
||||
list_concat([],L,L).
|
||||
list_concat([X1|L1],L2,[X1|L3]) :- list_concat(L1,L2,L3).
|
||||
%?- list_concat(ala, [ma, kota], L).
|
||||
%?- list_concat([ala], [ma, kota], L).
|
||||
|
||||
|
||||
list_delete(X, [X], []).
|
||||
list_delete(X, [X|L1], L1).
|
||||
list_delete(X, [Y|L2], [Y|L1]) :- list_delete(X,L2,L1).
|
||||
%?- list_delete(a, [h, s, g, a, d, t], L).
|
||||
|
||||
|
||||
%list_member(X,[X|_]).
|
||||
%list_member(X,[_|TAIL]) :- list_member(X,TAIL).
|
||||
list_append(A,T,T) :- list_member(A,T),!.
|
||||
list_append(A,T,[A|T]).
|
||||
%?- list_delete(z, [h, s, g, a, d, t], L).
|
||||
%?- list_delete(z, [h, s, g, a, d, t], L).
|
||||
|
||||
% insert into every position
|
||||
%list_delete(X, [X], []).
|
||||
%list_delete(X,[X|L1], L1).
|
||||
%list_delete(X, [Y|L2], [Y|L1]) :- list_delete(X,L2,L1).
|
||||
list_insert(X,L,R) :- list_delete(X,R,L).
|
||||
%?- list_insert(a, [b, c, d], L).
|
||||
|
||||
%list_delete(X,[X|L1], L1).
|
||||
%list_delete(X, [Y|L2], [Y|L1]) :- list_delete(X,L2,L1).
|
||||
list_perm([],[]).
|
||||
list_perm(L,[X|P]) :- list_delete(X,L,L1),list_perm(L1,P).
|
||||
%?- list_perm([a, b, c], L).
|
||||
|
||||
%list_concat([],L,L).
|
||||
%list_concat([X1|L1],L2,[X1|L3]) :- list_concat(L1,L2,L3).
|
||||
list_rev([],[]).
|
||||
list_rev([Head|Tail],Reversed) :- list_rev(Tail, RevTail),list_concat(RevTail, [Head],Reversed).
|
||||
%?- list_rev([a, b, c], L).
|
Loading…
Reference in New Issue
Block a user