english version while1 - stránky o programování

PROLOG

Jazyk

PROLOG - PROgramation a LOGic (PROgramování v LOGice). Prolog je jazyk pro logické programování navržený Colmerauerem ve Francii r. 1967. Je dodnes preferovaným jazykem pro umělou inteligenci a to především v Evropě a Japonsku. Prolog se měl také stát strojovým jazykem počítačů páté generace, které mají už 24 let zpoždění (psáno r.2005).

Program tvoří konečná množina Hornových klauzulí. S programem pracujeme tak, že zadáváme dotazy - Hornovy klauzule a Prolog zjišťuje, zda lze na dotaz podle programu odpovědět a jak.

V programu se vyskytují:

  • fakta - konstantní tvrzení
  • pravidla - obecná tvrzení s proměnnými

Odkazy

Několik funkcí v PROLOGU pie ze semináře IZU - Základy umělé inteligence.

append - spojeni dvou seznamu do tretiho
append([],L,L). append([H|T1],T2,[H|T3]):- append(T1,T2,T3).
reverse - reverze linearniho seznamu
reverse([],[]). reverse([H|T],L):- reverse(T,L1), append(L1,[H],L).
length - delka linearniho seznamu
length([],D):- D = 0. length([H|T],D):- integer(H), length(T,DT), D is DT + 1.
length_g - delka obecneho seznamu
length_g([],D):- D = 0. length_g([H|T],D):- integer(H), length_g(T,DT), D is DT + 1. length_g([H|T],D):- length_g(H,DH), length_g(T,DT), D is DH + DT.
member - prvek je/neni osazen v obecnem seznamu
member(X,[]):- fail. member(X,[X|_]). member(X,[H|T]):- integer(H), member(X,T). member(X,[H|_]):- member(X,H). member(X,[_|T]):- member(X,T).
maximum - maximum obecneho seznamu
max(X,Y,Z):- X >= Y, Z is X. max(X,Y,Z):- Z is Y. maximum([],X):- fail. maximum([H|T],X):- integer(H), maximum(T,X1), max(H,X1,X). maximum([H|_],X):- integer(H), X is H. maximum([H|T],X):- maximum(H,X1), maximum(T,X2), max(X1,X2,X). maximum([H|_],X):- maximum(H,X1), max(X,X1,X). maximum([_|T],X):- maximum(T,X1), max(X,X1,X).
reverse_g - reverze obecneho seznamu
reverse_g([],[]). reverse_g([H|T],L):- integer(H), reverse_g(T,L1), append(L1,[H],L). reverse_g([H|T],L):- reverse_g(T,L1), reverse_g(H,L2), append(L1,[L2],L). append([],L,L). append([H|T1],T2,[H|T3]):- append(T1,T2,T3).
depth - hloubka zanoreni obecneho seznamu
max(X,Y,Z):- X >= Y, Z is X. max(X,Y,Z):- Z is Y. depth([],D):- D = 0. depth([H|T],D):- integer(H), depth(T,DT), max(DT,1,D). depth([H|T],D):- depth(H,DH), X is DH + 1, depth(T,DT), max(X,DT,D).
go - test predikatu
go():- reverse([1,2,3,4],Rev1), write(" Reverze linearniho seznamu : ",Rev1), nl, reverse(Rev1,Rev2), write(" Reverze linearniho s. nazpet : ",Rev2), nl, length([1,5,2,3,10,12],D), write(" Delka linearniho seznamu je : ",D), nl, length_g([1,2,[3,4],[5,[6,7,[8]]],9,10,[11]],D2), write(" Delka obecneho seznamu je : ",D2), nl, member(9,[1,3,[5,[7]],9]), nl, maximum([1,5,[2,3],[10],12],X), write(" Maximum obecneho seznamu je : ",X), nl, reverse_g([2,[4,8,3,[1,2],8],19,4],RevG1), write(" Reverze obecneho seznamu : "), write(RevG1), nl, reverse_g(RevG1,RevG2), write(" Reverze obecneho s. nazpet : "), write(RevG2), nl, depth([1,5,[2,3],[10],12],Dep), write(" Hloubka je : ",Dep), nl.
Kontakt
Prohlášení o dostupnosti
Tisk stránky
Autor: Václav Bubník © 2005
vbubnik@post.cz
XHTML 1.0| CSS