Prolog. Alguns programes d’exemple¶
La «família» que podeu baixar-vos del fitxer
familia.pl
:% mare(F,M) "la mare de F és M" mare(joan,angela). mare(maria,angela). % germana(A,G) "la germana d'A és G" germana(angela,cris). germana(angela,judit). % tia(N,T) "la tia de N és T" tia(N,T) :- mare(N,M), germana(M,T).
Algunes consultes en «família»:
?- tia(N,T). ?- tia(N,judit). ?- tia(joan,T). ?- tia(joan,judit).
Termes, variables, unificació, llistes:
?- f(X,a) = f(b,Y). ?- f(f(X),a) = f(Y,Y). ?- f(f(X),a) \= f(Y,Y). ?- f(f(X),a) = f(Y,Z). ?- [X,Y|L] = [a,b,c]. ?- [X|L] = [Y,Z,a,g(b),c].
Consulteu unificació de termes.
Programes amb «llistes» que podeu baixar-vos del fitxer
llistes.pl
:% pert(E,L) "l'element E pertany a la llista L" % concat(L1,L2,L3) "la concatenació les llistes L1 i L2 és la llista L3" % pert_amb_resta(E,L,R) "l'element E pertany a la llista L, % i la llista R conté els elements de L excepte E"
Consultes amb «llistes»:
?- pert(X,[a,b,c]). ?- concat([a,b,c],[c,d,e],L). ?- concat(L1,L2,[a,b,c]). ?- concat([X|L],[a,Y,b,c],[1,2,a,Z,b,Z]). ?- pert_amb_resta(X,[a,b,c],R).
Nota
El predicat pert/2 ja existeix en SWI-Prolog, i es diu member/2
El predicat concat/3 ja existeix en SWI-Prolog, i es diu append/3
El predicat pert_amb_resta/3 ja existeix en SWI-Prolog, i es diu select/3
Consulteu la library(lists) de SWI-Prolog i els predicats predefinits amb llistes.
Aspectes extralògics de Prolog: aritmètica predefinida.
?- X = 2+3. ?- X is 2+3. ?- X is 1/3. ?- X is (7+3) mod 2. ?- 3 is 3+2. ?- 2 is X+1. ?- X is f(1). ?- X = 3*2, Y is X+1. ?- X = 3*2, Y = 1+1, Y is X//3.
Consulteu els predicats aritmètics de SWI-Prolog.
Alguns predicats que fan servir aritmètica predefinida, i que teniu al fitxer
arit.pl
:% mida(L,N) "la mida de la llista L és N" % fact(N,F) "el factorial de N és F" (VERSIÓ 0) % factors_primers(N,L) "la llista de factors primers de N és L"
Combinatòria, que teniu al fitxer
comb.pl
:% permutacio(L,P) "P és una permutació de L" % subcjt(L,S) "S és un subconjunt de L" % xifres(L,N) "a partir dels números de la llista L es forma una expressió % amb sumes, restes i productes que s'avalua al valor N" % expressió(L,E) "E és una expressió formada amb les xifres de la llista L"
Nota
El predicat
permutacio/2
ja existeix en SWI-Prolog i es diu permutation/2
Aquest programa simplement genera i comprova totes les expressions formades a partir de subconjunts permutats de L.
?- xifres( [4,9,8,7,100,4], 380 ).
Càlcul de derivades, que teniu al fitxer
deriv.pl
:% der(E,X,D) "la derivada de la expressió E respecte de la variable X és la expressió D"
Simplificació d’expressions, que teniu al fitxer
simplif.pl
:% simplifica(E,E1) "L'expressió E1 és la simplificació final de l'expressió E" % unPas(E,E1) "L'expressio E1 és l'expressió E simplificada un pas"
Podem fer servir aquests dos programes, per exemple, així:
?- der(2*x*x + 3*x, x, D), simplifica(D,D1).
Nota
Altres referències a la documentació de SWI-Prolog: