Você está na página 1de 2

c:\users\pedro\documents\prolog\l3.

pl Page 1
% Procurar elemento na posição k
findk(1,[X|_],X).
findk
findk(K,[_|Tail],X):-
:- Kaux is K-1, findk(Kaux,Tail,X).

% Comprimento da Lista
len([],0).
len([_|Tail],L):-
len :- len(Tail,Laux),L is Laux+1.

% Inverter a Lista
reverte(L1,L2):-
:- rev(L1,L2,[]).

rev([Head|Tail],L2,LRev) :- rev(Tail,L2,[Head|LRev]).
rev([],L2,L2).
rev

% Verificar se é um palindromo
palindrome(L1):-
:- reverte(L1,L1).

% Procurar a posição do elemento


findp(X,[X|_],1).
findp(X,[_|Tail],P):-
findp :- findp(X,Tail,PAux), P is PAux+1.

% Soma dos elementos da Lista


soma([X],X).
soma([Head|Tail],S):-
:- soma(Tail,SAux),S is SAux + Head.

% Contar ocorrência de um elemento


ocorrencia(_,[],0).
ocorrencia(X,[X|Tail],S):-
:-
ocorrencia(X,Tail,Saux),
S is Saux + 1.
ocorrencia(X,[H|Tail],S):-
:-
\+ X = H,
ocorrencia(X,Tail,S).

% Ver se um elemento não é membro à lista


nao_membro(_,[]).
nao_membro(X,[Y|Tail]):-
:- X \= Y, nao_membro(X,Tail).

% Ver se um elemento pertence à lista


pertence(X,[X|_]).
pertence(X,[_|Tail]):-
:- pertence(X,Tail).

nao_pertence :- \+
(X,Lista):- pertence(
X,Lista).

% Ver se dois elementos estão lado a lado


lado(X,Y,[X,Y|_]).
lado(X,Y,[Y,X|_]).
lado(X,Y,[_,B|Tail]):-
lado :-lado(X,Y,[B|Tail]).
:-

stand(vegas,[
cliente(rui,2324,23,medico,[ carro(audi,a2,20000),
carro(bmw,serie3,30000)]),
cliente(rita,2325,32,advogado,[carro(audi,a3,30000)]),
cliente(joao,2326,26,professor,[moto(honda,gl1800,26000)]),
cliente(ana,2327,49,medico,[
carro(audi,a4,40000),
carro(bmw,serie3,32000),
carro(ford,focus,24000)])
]).

stand(miami,[
stand
cliente(rui,3333,33,operario,[carro(fiat,panda,12000)]),
cliente(paulo,3334,22,advogado,[carro(audi,a4,36000)]),
cliente(pedro,3335,46,advogado,[carro(honda,accord,32000),
carro(audi,a2,20000)])
c:\users\pedro\documents\prolog\l3.pl Page 2
]).

%Nome dos clientes de cada stand


%lista_clientes(X,C).
%X = vegas
%C = [rui, rita, joao, ana]

%X = miami,
%C = [rui, paulo, pedro]

lista_clientes :- stand(X,L), findall(C, member(cliente(C,_,_,_,_),L),LC).


(X,LC):-

happy(fido).
happy
happy(harry).
happy
happy(X)
happy :- rich(X).
rich(harry).

nota(ana, 14).
nota(rui, 13).
nota(sara,
nota 13).
nota(ze,
nota 16).
nota(sara,13).
nota

foo(a, b, c).
foo(a, b, d).
foo(b,
foo c, e).
foo(b,
foo c, f).
foo(c,
foo c, g).

criminal(P):-
:-american(P), weapon(W), nation(N), hostile(N), sells(P,N,W).
owns(nono,m1).
missil(m1).
sells(west,nono,
sells :-owns(nono,
W):-
:- W),missil(W).
weapon(W):-
:-missil(
:- W).
hostile(N):-
:-enemy(
:- N,america).
american(west).
nation(nono).
enemy(nono,america).
nation(america).

%Verificar se é o último elemento


last1(X,[X]).
last1(X,[_|Tail]):-
:- last1(X,Tail).

%Verificar se é o primeiro elemento


first1(X,[X|_]).

%Juntar 2 lista
adicionar([],L2,L2).
adicionar([X|L1],L2,[X|LF]):-
:-adicionar(L1,L2,LF).

%Separar Lista
%([a-1,b-2,c-3],L1,L3).
%L1 = [a,b,c]
%L2 = [1,2,3]
%
sep1([],[],[]).
sep1([(X-Y)|Tail],[X|L1],[Y|L2]) :- sep1(Tail,L1,L2).

Você também pode gostar