Prolog – ciekawe i proste programy

Poniżej znajduje się zbiór bardzo ciekawych i raczej prostych programów, które podczas nauki Prologu, są powodem niejednokrotnie zdumienia i zamyślenia :). Enjoy!

Palindrom

Kod

Bardzo ciekawy program (z punktu widzenia programisty) do sprawdzania czy dane slowo zapisane w liście jest palindromem. Poniżej kod programu 🙂

% skleja 2 listy
sklej([],X,X).
sklej([X|L1],L2,[X|L3]) :-
	sklej(L1,L2,L3).
% odwraca liste
odwroc([],[]).
odwroc([H|T],L) :-
	odwroc(T,R),
	sklej(R,[H],L).
% a teraz uwaga uwaga!!!
palindrom(L) :-
	odwroc(L,L).
% czyż to nie jest piękne?

Przykłady

Zasada działania predykatu sklej:

?- sklej([],[a,b,c],L).
L = [a, b, c].
 
?- sklej([d,e],[a,b,c],L).
L = [d, e, a, b, c].
 
?- sklej(X,[a,b,c],[a,b,c,d,e]).
false.
 
?- sklej(X,[a,b,c],[d,e,a,b,c]).
X = [d, e] ;
false.
 
?- sklej(X,L,[d,e,a,b,c]).
X = [],
L = [d, e, a, b, c] ;
X = [d],
L = [e, a, b, c] ;
X = [d, e],
L = [a, b, c] ;
X = [d, e, a],
L = [b, c] ;
X = [d, e, a, b],
L = [c] ;
X = [d, e, a, b, c],
L = [] ;
false.

Zasada działania predykatu odwróć

?- odwroc([a,b,c],X).
X = [c, b, a].
 
?- odwroc(Y,[a,b,c]).
Y = [c, b, a] ;

Przykład zastosowania predykatu palindrom

?- palindrom([k,a,j,a,k]).
true.
 
?- palindrom([k,a,j,u,t,a]).
false.
 
?- palindrom([k,o,b,y,l,a,m,a,m,a,l,y,b,o,k]).
true.
 
?- palindrom("kobylamamalybok").
true.

Jedno przemyślenie nt. „Prolog – ciekawe i proste programy”

Dodaj komentarz