Lógica Para a Programação a negação na Programação em Lógica e no Prolog 2. a comunicação utilizador/programa no Prolog (via teclado/terminal e via ficheiros) 1. Lógica Para a Programação 1. a negação na Programação em Lógica e no Prolog • • os programas em lógica descrevem o que é verdade; o falso é omitido no Prolog certas relações são mais fáceis de especificar com a negação • operador not está denido na linguagem(\+) Pedro Torres Lógica Para a Programação 1. a negação na Programação em Lógica e no Prolog /+ <termo> é verdadeiro se não for possivel provar <termo> • • Negacão por falha: assume que o mundo é fechado, ou seja, que tudo o que e verdadeiro pode ser inferido Pedro Torres Lógica Para a Programação 1. a negação na Programação em Lógica e no Prolog • Exemplo1: • legal(X) :- \+ ilegal(X). pode ser avaliada somente pela busca exaustiva de todas as coisas que são ilegais e comparando estas com X, e se nenhum facto ilegal for descoberto, X é legal. Isso é chamado negação por falha. Pedro Torres Lógica Para a Programação 1. a negação na Programação em Lógica e no Prolog • Exemplo2: • Como calcular a intersecção entre 2 conjuntos usando o predicado percence? • • pertence(X,[X|R]). pertence(X,[Y|R]) :- pertence(X,R). Pedro Torres Lógica Para a Programação 1. a negação na Programação em Lógica e no Prolog • Exemplo2: • • • • • interseccao([X|Y],M,[X|Z]) :- pertence(X,M),interseccao(Y,M,Z). interseccao([X|Y],M,Z) :- \+ pertence(X,M),interseccao(Y,M,Z). interseccao([],M,[]). pertence(X,[X|R]). pertence(X,[Y|R]) :- pertence(X,R). Pedro Torres Lógica Para a Programação 2. a comunicação utilizador/programa no Prolog (via teclado/terminal e via ficheiros) • INPUT e OUTPUT são dois termos muito comuns quando falamos de computadores. Designa-se por INPUT a informação transmitida a um programa. OUTPUT refere-se ao resultado da execução de um programa. Pedro Torres Lógica Para a Programação 2. a comunicação utilizador/programa no Prolog (via teclado/terminal e via ficheiros) • Até aqui, quando corremos os nossos programas em Prolog, só usamos o terminal para INPUT e OUTPUT. Mas existem maneiras de dizer ao Prolog para fazer o input através de um ficheiro, ou mandar o output para um. Isto é util quando queremos testar um programa, ou quando queremos analisar o resultado deste mais tarde. Pedro Torres Lógica Para a Programação 2. a comunicação utilizador/programa no Prolog (via teclado/terminal e via ficheiros) • Uso do write/1 e do read/1 (para termos) • • • • Exemplos: ?- write(ola). ola True. Pedro Torres • • • ?- read(X). |: 4. X = 4. Lógica Para a Programação 2. a comunicação utilizador/programa no Prolog (via teclado/terminal e via ficheiros) • • get/1 e put/1 (para caracteres, semelhante ao read e write) Formatação do OUTPUT: nl(nova linha)e tab/1(tabulação) Pedro Torres Lógica Para a Programação 2. a comunicação utilizador/programa no Prolog (via teclado/terminal e via ficheiros) • OUTPUT usando ficheiros. tell(filename) – as operações de escrita passarão a ser feitas usando o ficheiro filename (é o novo output stream). telling(filename) – filename é o actual output stream. told – fecha o output stream. Pedro Torres Lógica Para a Programação 2. a comunicação utilizador/programa no Prolog (via teclado/terminal e via ficheiros) • INPUT usando ficheiros. see(filename) – as operações de leitura passarão a ser feitas usando o ficheiro filename (é o novo input stream). seeing(filename) – filename é o actual input stream. seen – fecha o intput stream. Pedro Torres Lógica Para a Programação 2. a comunicação utilizador/programa no Prolog (via teclado/terminal e via ficheiros) • • • Outros predicados de INPUT/OUTPUT consult(filename):-carrega o filename para o interpretador do Prolog reconsult(filename):-re-carrega o filename para o interpretador do Prolog Pedro Torres