Toggle navigation
?
users online
Logout
Open hangout
Open chat for current file
%Indique todas as respostas do prolog ao objetivo p(X,Y). p(X,Y) :- q(X),r(Y),!. p(5,z). q(1). q(2). r(a). r(b). %p(X,Y) :- !,q(X),r(Y). %p(X,Y) :- q(X),!,r(Y). %p(X,Y) :- q(X),r(Y),!. %Indique todas as respostas do prolog ao objetivo p(X,Y). p1(2, 3). p1(X,Y) :- q1(X),r1(Y). q1(1). q1(2):-!. q1(3). r1(1). r1(3). %Defina o predicado classe/2, tal que classe(N, C), em que N é um %inteiro, significa que a classe de N é C, sendo o domínio de C o %conjunto {zero, positivo, negativo}. Use o operador de corte %sempre que tal melhorar o seu programa. Por exemplo, % ?- classe(10, C). % C = positivo. % ?- classe(0, C). % C = zero. % ?- classe(-20, C). % C = negativo. classe(N, positivo) :- N > 0, !. classe(N, zero) :- N == 0, !. classe(N, negativo) :- N < 0. %Negação %Defina o predicado intersecao/3, tal que intersecao(L1, L2, I), %em que L1 e L2 são listas de inteiros, significa que I é a lista %com os elementos comuns a L1 e L2. Use o operador de corte sempre %que tal melhorar o seu programa. O seu programa não deve permitir %que o pedido de múltiplas respostas origine respostas erradas. %Por exemplo, %?- intersecao([1,2,3,4,5], [1,3,5], I). %I = [1, 3, 5]. pertence(E, [P|_]) :- E == P. pertence(E, [_|R]) :- pertence(E, R). intersecao1(L1, L2, I) :- intersecao(L1, L2, [], I). intersecao([], _, Acu, Acu):-!. intersecao([P|R], L2, Acu, I) :- pertence(P, L2) -> append(Acu, [P], Novo_acu), intersecao(R, L2, Novo_acu, I) ; intersecao(R, L2, Acu, I). intersecao(_,[],[]):-!. intersecao(L1,[P|L2],I):- \+ member(P,L1),!, intersecao(L1,L2,I). intersecao(L1,[P|L2],[P|I]):- intersecao(L1,L2,I). intersecao2([], _, []) :- !. intersecao2(_, [], []) :- !. intersecao2([P | R], L, [P | IRL]) :- membro(P, L), !, intersecao(R, L, IRL). intersecao2([P | R], L, IRL) :- \+ membro(P, L), intersecao(R, L, IRL). %Defina o predicado disjuntas/2, tal que disjuntas(L1,L2), %em que L1 e L2 são listas de inteiros, significa que L1 e L2 %são disjuntas, isto é, não têm elementos em comum. Por exemplo, %?- disjuntas([1,2], [3,4,2]). %false. % ?- disjuntas([1,2], [3,4]). % true. %Usando o corte e o falhanço forçado. disjuntas([], _) :- !. disjuntas(_, []) :- !. disjuntas([El | _], L2) :- member(El, L2), !, fail. disjuntas([_ | L1], L2) :- disjuntas(L1, L2). %Usando a negação. disjuntas_n([],_):-!. disjuntas_n([P|L1], L2) :- \+member(P, L2), disjuntas_n(L1, L2). disjuntas2(L1,L2) :- \+ (member(E,L1),member(E,L2)). % trabalha(P, D) :- pessoa(P), diaUtil(D), \+ temJust(P, D). temJust(P, D) :- doente(P, D), \+ constipado(P, D). diaUtil(D) :- member(D, [seg, ter, qua, qui, sex]). pessoa(rui). pessoa(jaime). pessoa(joana). doente(rui, seg). doente(jaime, qua). constipado(jaime, qua). %trabalha(rui,qua) %trabalha(jaime,qua) %trabalha(joana,qua) %%false. %\+ temJust(P, seg). %Quem não tem justificação na segunda-feira?