Procedimentos Pré-definidos em prolog comunicação

Slides:



Advertisements
Apresentações semelhantes
Estruturação de Linguagens (Pascal e C++)
Advertisements

Introdução à Linguagem Prolog
Programação em Java Prof. Maurício Braga
1 Trabalho prático 8 Private Sub cmdExecutar_Click() If optLer Then frmLer.Show Else frmEscrever.Show End If End Sub Ficheiro de pontos Ficheiro de distancias.
1 Exercício prático 7 Private Sub cmdExecutar_Click() If optLer Then frmLer.Show Else frmEscrever.Show End If End Sub Private Sub cmdSair_Click() End End.
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTRODUÇÃO AOS APLICATIVOS JAVA Prof. Thiago Pereira Rique
INTRODUÇÃO AOS APLICATIVOS JAVA
Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Ficheiros 5.1 Octave Ficheiros.
Registos em Ficheiros - Estruturas Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2008/ Maio 20091Registos em.
11 de Maio de 2006Listas e Ordenação1 Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2005/2006.
17 Novembro 2005Leitura, Escrita e Processamento de Registos - Estruturas e Listas 1 Leitura, Escrita e Processamento de Registos Estruturas e Listas Jorge.
10 Novembro 2006Leitura, Escrita e Processamento de Registos - Estruturas e Listas 1 Leitura, Escrita e Processamento de Registos Estruturas e Listas Jorge.
5 de Maio de 2005Registos em Ficheiros1 Registos em Ficheiros - Estruturas Pedro Barahona DI/FCT/UNL Maio 2005.
Tipos de igualdade X = Y é verdadeiro se X é igual a Y. X is E é verdadeiro se X é a avaliação da expressão E. E1 =:= E2 é verdadeiro se a avaliação da.
Busca em Profundidade Para encontrar um caminho de solução Sol, de um dado nó para algum nó objetivo Se N é um nó objetivo, então Sol=[N] Se há um nó N1.
Adaptado de material da profa. Maria Aparecida Livi
Streams Java.
Life Leonardo Lemos (lal)Paulo Oliva (pbo)& Controle de Fluxo * de predicados: Como em Prolog: fail. conjunção (A,B). disjunção (A;B). Diferente de Prolog:
Prolog: Predicados Built-in 2
LIFE: predicados, funções e sorts built-in Jacques Robin Paulo Oliva Leonardo Lemos DI-UFPE.
Prof. Luis Otavio Alvares
Programação Lógica: PROLOG
9 Controle de fluxo Seqüenciadores. Jumps. Escapes. Exceções.
7 Abstração Genérica Unidades genéricas e instanciação.
6. Backtracking e Controle
2. A Linguagem Prolog.
3. Sintaxe e Semântica.
Sintaxe de Fortran 25/abril/2006. Comandos Fortran PROGRAM PRINT READ STOP END.
Arquivos. 2 Namespace System.IO Toda as classes relacionadas com dispositivos de entrada e saída encontram-se em System.IO Incluir no início do programa:
Programação em Lógica Augusto Marks Batista Guilherme dos Santos Fujiyoshi Marlon Bill Santos.
Robson Godoi / Sandra Siebra
Tratamento de Ficheiros
Programação Baseada em Objectos Desenho de TAD
Programação Orientada para Objectos
Revisão da Linguagem C.
Introdução a Programação JAVA
Capítulo 10 Strings & File I/O. Strings Strings são um conjunto de Caracteres ASCII. No Controle de Instrumentação pode-se converter valores numéricos.
Paradigmas de programação
LISTAS Uma lista é uma estrutura de dados muito comum na programação não numérica (com particular destaque na computação simbólica onde representa quase.
Inteligência Artificial: A Linguagem Prolog (parte 2)
João Lucas de Oliveira Torres
Sintaxe e Semântica do PROLOG.
LISTAS Uma lista é uma estrutura de dados muito comum na programação não numérica (com particular destaque na computação simbólica onde representa quase.
Variáveis, Tipos de Dados e Constantes
Unidade 3 Controle de Concorrência
Python: Exceções, Iteradores e Geradores
Comunicação Inclusiva Acessibilidade e Programação Web
PROGRAMAÇÃO ESTRUTURADA II
Introdução a Programação COM 100
CADEIA DE CARACTERES (Strings)
Streams –input e output
Uma Breve Introdução á programação lógica
Programação em C++ Compiladores
Estruturas de Dados Aula 9: Listas (parte 1)
Introdução à programaçao em PERL Levi Lúcio, Vasco Amaral, Programação em PERL, FCA-Editora de Informática.
Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista Linguagens de Programação Prof. Miguel Elias Mitre Campista
Introdução a Perl Tema 3B Pablo Gamallo Otero
ARQUIVOS.
BCC /01 Aula Teórica 09 Funções Material Didático Proposto. 1 BCC701 – Programação de Computadores I Universidade Federal de Ouro Preto Departamento.
Sistemas Especialistas Podem ser definidos como programas de computador desenvolvidos para representar o conhecimento humano num dado domínio específico.
Princípios da Programação em Prolog
Programação de PIC em C Exposição das funções básicas para
18/19 de Maio de 2004Registos em Ficheiros1 Pedro Barahona DI/FCT/UNL Maio 2004.
Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta.
Programação de Computadores I – Arquivos
Estruturas de Dados + Algoritmos = Programas
Programação de Computadores - 1
PROGRAMAÇÃO LÓGICA Vinicius Ponte Machado Aula 13 – Predicados de Controle UNIVERSIDADE FEDERAL DO PIAUÍ – UFPI Departamento de Informática & Estatística.
Programação e Sistemas da Informação 48 tempos IPTrans, Novembro 2009 Prof. Marisa Gomes.
8. Entrada e Saída. Arquivos de Dados Algumas aplicações podem exigir a entrada e saída de dados para diferentes dispositivos e em diferentes formatos.
Transcrição da apresentação:

Procedimentos Pré-definidos em prolog comunicação Vários tipos de comunicação utilizador/programa: Comunicação básica (questão, em seguida, resposta em termos instanciações de variáveis). Comunicação (input) de dados sobre outras formas (quais?). Comunicação (output) de dados em qualquer formato. Comunicação (input e output) para ficheiro ou outro dispositivo que não seja o terminal. As implementações do PROLOG disponibilizam alguns procedimentos pré-definidos para tratar os diversos tipos comunicação.

Comunicação terminal P  file_in 1 file_in 2 file_out 1 file_out 2 output streams input user_in user_out O programa pode utilizar vários ficheiros simultaneamente para leitura, designados por input streams ou para escrita, designados por output streams. Durante a execução de um programa em PROLOG são abertos, inicialmente, um ficheiro de leitura, designado por current input stream e um ficheiro de escrita, designado por current output stream.

Processamento de ficheiros de termos PROCEDIMENTO read O procedimento (de input) read faz a leitura de termos a partir do current input stream. O objectivo read(X). faz a leitura de um termo T (a introduzir após validar o objectivo) e, seguidamente, X é substituído por T, se X é uma variável; senão read(X) falha sem retrocesso. Exemplo ? read(X). ? read(atomo). ? read(X). |: termo. |: atomoX. |: Y. X = termo; no X = _G111 no yes Observação A introdução de um termo termina com um ponto.

Procedimentos Pré-Definidos em PROLOG PROCEDIMENTO write O procedimento (de output) write faz a escrita de termos no current output stream. O objectivo write(T). escreve o termo T na forma sintática utilizada para as instâncias das variáveis. Exemplo ? write(termo). ? write(X). ? write([a,b,c]). termo. _G117 [a,b,c] yes X = _G117; yes no Observação O procedimento write escreve um termo, no current output stream, independentemente da sua complexidade sintáctica.

PROCEDIMENTO tab O procedimento (de output) tab faz a inserção de espaços em branco no current output stream. O objectivo tab(N) introduz N espaços em branco no current output stream. Exemplos ? read(X),tab(10),write(X). |: [a,b,c]. [a,b,c] X = [a,b,c]; no ?- write(ola), tab(5), write(amigos). ola amigos Yes

PROCEDIMENTO nl O procedimento nl faz deslocar a escrita de termos, no current output stream, para o início da próxima linha. Exemplo ?write(ola),nl,write([a,b,c]). ola [a,b,c] yes

Exemplo cube :- write('proximo numero: '), read(X), process(X). process(stop) :- !. process(N) :- C is N * N * N, write('o cubo de '),write(N),write(' e '), write(C),nl,cube. ? cube. proximo numero: 5. o cubo de 5 e 125 proximo numero: 4. o cubo de 4 e 64 proximo numero: stop. yes

Manipulação de caracteres PROCEDIMENTO put O procedimento (de output) put escreve, no current output stream, um carácter codificado em ASCII. O objectivo put(C) escreve o carácter que corresponde ao código ASCII C. PROCEDIMENTO get O procedimento get0 faz a leitura, a partir do current input stream, de um carácter codificado em ASCII. No objectivo get0(C) C é instanciado com o código ASCII do carácter a ler. O procedimento get(C) não faz a leitura dos espaços em branco.

(De)Composição de átomos name(A,L) é verdadeiro se L é a sequência (representada por uma lista) dos códigos ASCII que correspondem aos caracteres que formam o átomo A. Exemplo getsentence(Wordlist) :- get0(Char), getrest(Char,Wordlist). getrest(46,[]) :- !. getrest(32,Wordlist) :- !, getsentence(Wordlist). getrest(Letter,[Word|Wordlist]) :- getletters(Letter,Letters,Nextchar), name(Word,Letters),getrest(Nextchar,Wordlist). getletters(46,[],46) :- !. getletters(32,[],32) :- !. getletters(Let,[Let|Letters],Nextchar) :- get0(Char),getletters(Char,Letters,Nextchar). ? getsentence(W). |: Mary was pleased to see the robot fail. ['Mary','was','pleased','to','see','the','robot','fail'] yes

Leitura de programas Podemos comunicar os nossos programas ao PROLOG através dos predicados pré-definidos: consult e reconsult. PROCEDIMENTO consult O efeito da execução do objectivo ? consult(F) é disponibilizar todas as cláusulas no ficheiro F, na sessão actual do PROLOG, para serem utilizadas, posteriormente, na execução de objectivos introduzidos pelo utilizador. Se, na mesma sessão do PROLOG, outro ficheiro (e.g. G) é lido através da execução do objectivo ? consult(G), então é adicionado, ao fim do ficheiro actual, as cláusulas do (novo) ficheiro G. PROCEDIMENTO reconsult O efeito da execução do objectivo ? reconsult(F) é análogo à execução do objectivo ? consult(F), excepto que, todas as cláusulas do ficheiro F, que foram previamente definidas, são redefinidas pelas cláusulas na nova versão de F.

Verificar o tipo dos termos integer(X) é verdadeiro se X é um inteiro. var(X) é verdadeiro se X é uma variável não instanciada. nonvar(X) é verdadeiro se X é um termo, que não seja uma variável, ou X é uma variável instanciada. atom(X) é verdadeiro se X é um átomo. real(X) é verdadeiro se X é um real. atomic(X) é verdadeiro se X é um inteiro ou um átomo. Exemplo % count(A,L,N) onde N é o número de ocorrências do átomo A na lista L. count(_,[],0). count(A,[B|L],N) :- atom(B),A = B,!, count(A,L,N1), N is N1 + 1 ; count(A,L,N).

PROCEDIMENTO =.. T =.. L é verdadeiro se L é uma lista que contém o functor principal do termo T seguido dos seus argumentos. Exemplo enlarge(Fig,F,Fig1) :- Fig =.. [Type|Parameters], multiplylist(Parameters,F,Parameters1), Fig1 =.. [Type|Parameters1]. multiplylist([],_,[]). multiplylist([X|L],F,[X1|L1]) :- X1 is F * X,multiplylist(L,F,L1). ?- multiplylist([1,2,3],3,L). L = [3, 6, 9] Yes

PROCEDIMENTO functor functor(Term,F,N) é verdadeiro se F é o functor principal de Term e N a aridade de F. PROCEDIMENTO arg arg(N,Term,A) é verdadeiro se A é o N-ésimo argumento do termo Term (assumindo que os argumentos são numerados da esquerda para a direita).

Controlo de execução - o Corte ! O corte, denotado por !, elimina o retrocesso. fail é um objectivo que falha sempre. true é um objectivo que é sempre bem sucedido not(P) é tipo de negação que se comporta exactamente como se tivesse definido da seguinte forma: not(P) :- P,!,fail;true. call(P) invoca P. call(P) é bem sucedido se P é bem sucedido. repeat é um objectivo (não determinista) que é sempre bem sucedido. Exemplo dosquares :- repeat, read(X), (X = stop,! ; Y is X*X,write(Y),fail).

Controlo de execução - o Corte ! Adição de elementos sem duplicação adic(X,L,L1). Se x é membro de L então L=L1 senão L1 é L com a inserção de X na cabeça. adic(X,L,L):- membro(X,L),!,Adic(X,L,L1). Exemplos ?- adic(a,[b,c],L).

Controlo de execução - If-then-else ifThenElse(X,Y,Z). Pode ser simulado em Prolog por ifThenElse(X,Y,Z):- X,!,Y. ifThenElse(X,Y,Z)_- Z. Exemplo ?- ifThenElse(X,Y is Z+1,Y is 0).