*********************************** ********** LIN2 - Prolog ********** *********************************** Data : 09/10/2002 Versão : 04/07/2007 Professor: Wagner Toscano Autor : Leandro Salvador ( leandrosalvador.com.br ) * Exemplos - união de duas listas L1 e L2 include([], L2, L2). include([C | T1], L2, [C | T]) :- include(T1, L2, T). - verifica se dois nomes são irmãos pai(pedro,jaqueline). --> Pedro é o pai de Jaqueline pai(pedro,roberto). --> Pedro é o pai de Roberto %Regra irmaos(X, Y) :- pais(M, X), pais(M, Y), (X ¯Y). %Pergunta ?-irmaos(X, Y). X = jake Y = Shelly; X = shelly Y = jake - o maior entre dois números %Regra max(X, Y, X) :- X >= Y. max(X, Y, Y) :- X < Y. %Pergunta ?-max(2, 3, X) X = 3 yes. - exemplo de exceção %Fatos animal(cachorro). animal(cascavel). cobra(cascavel). %Regra likes(mary, X) :- cobra(X), !, fail; animal(X). %Perguntas ?likes(mary, cachorro). yes. ?likes(mary, cascavel). no - elevar um número ao cubo %Regra 1 cubo(N, C) :- C is N * N * N. %Perguntas ?-cubo(2, X). X = 8. %Regra 2 - Usuário digita os números cubo :- read(X), processa(X). processa(parar) :- !. processa(N) :- C is N * N * N, write(C), cubo. %Regra 3 - Usuário digita os números cubo :- write('Proximo item, por favor:'), read(X), processa(X). processa(parar) :- !. processa(N) :- C is N * N * N, write('O cubo de '), write(N), write('eh'), write(C), nl, cubo. - escrever uma lista na vertical writelist([]). writelist([X | L]) :- write(X), nl, writelist(L). ?-writelist([[a, b, c], [d, e, f], [g, h, i]]). [a, b, c] [d, e, f] [g, h, i] - escrever uma lista na horizontal emLinha([]). %responde um yes no final emLinha([X | L]) :- write(X), tab(1), emLinha(L). ?-emLinha([[a, b, c], [d, e, f], [g, h, i]]). [a, b, c] [a, b, c] [a, b, c] * Trabalhando com Arquivos - abrir - ler see(nome_do_arquivo). - escrever tell(nome_do_arquivo). - ler - uma linha read(variavel). - um caracter get0(C). - escrever - uma linha write(informacao). - um caracter put(C). - uma string até a mudança de linha writestring([]) :- nl. writestring(C - Cs) :- put(C), writestring(Cs). - fechar - um arquivo aberto para ler sees. - um arquivo aberto para escrever told. ----------//----------