Atribuição em PROLOG. Em PROLOG temos 2 operadores de atribuição. A atribuição simbólica é bidireccional, para X=Y temos:

Documentos relacionados
Estruturas de Controlo do PROLOG. Em PROLOG temos 4 estruturas de controlo principais:

! A Linguagem PROLOG foi criada nos anos 70 por Alain Colmareur, na Universidade de Marselha

A Linguagem PROLOG foi criada nos anos 70 por Alain Colmareur, na Universidade de Marselha

A Linguagem PROLOG foi criada nos anos 70 por Alain Colmareur, na Universidade de Marselha

Introdução à Programação em C Input / Output

Entrada e Saída. Prof. Elaine Faria e Hiran Nonato Programação Lógica UFU 2012

Exemplos de Programas para Tratamento de Ficheiros DXF

CFAC: Exemplos de Programas em FORTRAN

Métodos de Programação I Ana Maria de Almeida

CENTRO UNIVERSITÁRIO LUTERANO DE PALMAS PROLOG. Elias Melgaço Chaves Júnior Jonatas Luiz da Costa Rafael Gonçalves Barreira

Vamos agora abordar um conjunto de aspectos complementares, incluindo:

Departamento de Sistemas de Computação Universidade de São Paulo Introdução a Ciência de Computação I. Aula 13 Arquivos

Elementos básicos das linguagens de programação

Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

Exemplos de Programas em FORTRAN. João Manuel R. S. Tavares Joaquim O. Fonseca

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 31. Instituto de C

USP - ICMC - SSC SSC o. Semestre Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

Operações com Arquivos

USP - ICMC - SSC SSC o. Semestre Disciplina de Introdução à Computação para Engenharia Ambiental

Planejamento em Inteligência Artificial Capítulo 4 Planejamento como busca no Espaço de Estados

Acrescentando regras à Base de Conhecimento

1ª Lista de Exercícios. 1. São dados 2n números distintos distribuídos em dois vetores com n elementos A e B ordenados de maneira tal que

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 30. Instituto de C

Linguagens de Programação

Introdução à Programação em C (II)

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 32. Instituto de C

A equação de onda com fonte

Aula 9: Máquinas de Turing

2.2.5 EXPRESSÕES - Regras para o cálculo de valores

Variantes de Máquinas de Turing

USP - ICMC - SSC SSC o. Semestre Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Automação ]

Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Automação ]

da carruagem cujo comprimento, do seu ponto de vista, é L

Linguagem de Programação C. Arquivos

Introdução à programação em PASCAL. Aula de 22/10/2001. Nota: Conjunto de slides baseados nas transparências utilizadas em PEDA em anos anteriores

Listas. Em PROLOG os elementos das listas não têm de ser do mesmo tipo (por exemplo, [a,2,abc,[x,1,zzz]])

Uma introdução ao GAP

Programação lógica: operadores, repe ções e listas

Recursividade. Objetivos do módulo. O que é recursividade

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Informações sobre filas de BATCH via PBS nos servidores Linux 64 bits do CCIFUSP.

Introdução a programação Controle de Fluxo

Instituto Superior Técnico PROPAGAÇÃO & ANTENAS. Projecto 2014 / 2015

3.1 - Funções para manipular dados de entrada e saída padrão

1ª LISTA DE EXERCÍCIOS

Capítulo 13: Sistemas de E/S. Operating System Concepts with Java 7th Edition, Nov 15, 2006

Universidade de Aveiro

Voo Nivelado - Avião a Jacto

Programação Orientada a Objetos

Linguagens de Programação. Programação Funcional e Haskell Programação Interativa Thiago Alves

Programação de Computadores

Inteligência Artificial Apontamentos para as aulas. Luís Miguel Botelho

Capítulo III : A Linguagem Pascal Estruturas de Controlo

CONSTRUÇÃO DE CARTEIRAS DE RENDA VARIÁVEL USANDO RENDA FIXA E CONTRATOS FUTUROS DE BOLSA DE VALORES

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

Aulas Anteriores. Detalhes da linguagem de programação

Linguagem de Programação I. Aula 10 Funções

Programação estruturada em C++: extensões ao C. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2004/2005)

Programação de Computadores

SEBENTA INTRODUÇÃO Á ALGORITMIA

Geração de Código para LALG

ATIVIDADES PRÁTICAS SUPERVISIONADAS

Ciclo com Contador : instrução for. for de variável := expressão to. expressão do instrução

Geração de Código para LALG

Aula 01 Algoritmos e lógica de programação e introdução ao C++

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição

Computação Eletrônica

Mecanismos de Controle

Procedimento. Função. Selecção Condicional - a instrução if-then-else. expressão if lógica then instrução else instrução

UNIVERSIDADE DA BEIRA INTERIOR

RESOLUÇÃO. Computação e Programação (2009/2010-1º Semestre) 1º Teste (11/11/2009) Nome. Número. Leia com atenção os pontos que se seguem:

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

EXEMPLOS DE PROGRAMAS PASCAL

Introdução à Programação C

Prof. A. G. Silva. 25 de setembro de Prof. A. G. Silva INE5603 Introdução à POO 25 de setembro de / 35

LISTA DE EXERCÍCIOS MÊS 04

Informática para Ciências e Engenharias (B) 2016/17. Teórica 7

Técnicas de Programação I

Polos Olímpicos de Treinamento. Aula 1. Curso de Álgebra - Nível 3 Prof. Antonio Caminha. Desigualdades 1

Linguagem Computacional

Desenho de algoritmos

UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS C1105 INTRODUÇÃO À PROGRAMAÇÃO EM C

Desenho e Análise de Algoritmos CC /2018. Folha 1 - Revisão: Escrita de algoritmos em pseudo-código e verificação de correção

Linguagem C. Linguagem artificial e formal usada para comunicar instruções ao computador. Proposta por Dennis Ritchie entre 1969 e 1973.

Introdução ao Arduino ESCOLA DE ARTES VISUAIS DO PARQUE LAGE. Núcleo de Arte e Tecnologia. julio lucio martin. Aula 01

UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS CURSO DE ENGENHARIA ELECTROTÉCNICA/INDUSTRIAL

Computação Eletrônica

Introdução à Programação / Programação I

Estruturas condicionais

Algoritmos e Estruturas de Dados I

As Equações de Maxwell e a Onda Eletromagnética

O Predicado concatena

Prof. Natalia Castro Fernandes Mestrado em Telecomunicações UFF 2º semestre/2012

Programação de Computadores

I1, I2 e In são instruções simples ou estruturadas da linguagem Pascal.

Simulado de Linguagem de Programação Java

Programação Orientada a Objetos para Redes de Computadores. Herança. Herança. Hierarquia de Classes. Hierarquia de Classes PARTE 2

Aula 01 Algoritmos e lógica de programação e introdução ao C++

Aula 6 Oficina de Programação Estruturas Condicionais no C. Profa. Elaine Faria UFU

Transcrição:

Atribuição em PROLOG Em PROLOG temos 2 operadores de atribuição = para a atribuição simbólia X=a is para a atribuição numéria X is 5 A atribuição simbólia é bidireional, para X=Y temos: Se X não está instaniado e Y está então temos X Y Se X está instaniado e Y não está então temos X Y Se nenhum está instaniado então passam a ser a mesma variável Se ambos estão instaniados om o mesmo valor então há suesso Se ambos estão instaniados om valores diferentes então oorre uma falha 32?- X=Y,X=a. X = Y = a Atribuição em PROLOG?- Y=a,X=Y. Y = X = a?- X=a,X=Y. X = Y = a?- X=Y. X = Y = _?- X=a,Y=a,X=Y. X = Y = a?- X=a,Y=b,X=Y. no 33 1

Atribuição em PROLOG A atribuição numéria é unidireional Do lado direito do is, se estiverem envolvidas variáveis, elas devem estar instaniadas Do lado esquerdo a variável não deve estar instaniada, senão oorre uma falha Do lado direito as variável que apareçam devem estar instaniadas Em PROLOG N is N+1 nuna tem suesso 34 Esrita em PROLOG A esrita no output stream (normalmente o monitor) é feita om o write write(hello) esreve hello write( Hello World ) esreve Hello World write(hello) esreve onteúdo da variável Hello Outra possibilidade é esrever usando o put put(65) esreve o arater A (ódigo ASCII 65) A mudança de linha é feita om o nl 35 2

Leitura em PROLOG A leitura do input stream (normalmente o telado) é feita om o read read(x) lê o valor de X Deve-se terminar om o. seguido de RETURN Outra possibilidade é ler usando o get ou o get0 get(a) lê o próximo aráter (não brano, ou seja, ignora CR, TAB, espaço) get0(a) - lê o próximo aráter?- get(x),get(y),get(z). ab X = 97, Y = 98, Z = 99?- get0(x),get0(y),get0(z). ab X = 97, Y = 98, Z = 13 36 Reursividade O uso da reursividade é muito omum na linguagem PROLOG Na implementação de um prediado reursivo devemos ter em atenção que deverá haver sempre uma alternativa para finalizar as hamadas reursivas Por uma regra, ou fato, que não efetua essa hamada Por uma das alternativas de uma disjunção 37 3

Reursividade fatorial(0,1):-!. /* a função do! será expliada posteriormente */ fatorial(n,f):-n1 is N-1,fatorial(N1,F1),F is N*F1. Vejamos o que aontee quando se efetua a hamada?-fatorial(3,f). F=6 fatorial(0,1) falha fatorial(3,f):-n1 3-1,fatorial(2,F1), F is 3*2. suesso (/ F 6) fatorial(0,1) falha fatorial(2,f):-n1 2-1,fatorial(1,F1), F is 2*1. suesso (/ F 2) fatorial(0,1) falha fatorial(1,f):-n1 1-1,fatorial(0,F1), F is 1*1. suesso (/ F 1) fatorial(0,1):-!. suesso 38 Reursividade Considerando o seguinte programa que resolve o problema das Torres de Hanói: hanoi(n):-move(n,e,,d). move(0,_,_,_):-!. move(n,a,b,c):-m is N-1, move(m,a,c,b), informa(a,b), move(m,c,b,a). informa(a,b):- write('mover DISCO DE '), write(a),write(' PARA '),write(b),nl. Efetue a traçagem do que aontee quando se faz a hamada?-hanoi(3). 39 4

Reursividade?- hanoi(3). Su. hanoi(3):-move(3,e,,d). Su. 4 (2) move(3,e,,d):-m is 3-1, move(2,e,d,), informa(e,), move(2,d,,e). Su. 2 (2) move(2,e,d,):-m is 2-1, move(1,e,,d), informa(e,d), move(1,,d,e). Su. 1 (2) move(1,e,,d):-m is 1-1, move(0,e,d,), informa(e,), move(0,d,,e). Su. 3 (2) move(1,,d,e):-m is 1-1, move(0,,e,d), informa(,d), move(0,e,d,). Su. Output: 1 e 2 e 3 4 e 5 d 6 d 7 e d d e 6 (2) move(2,d,,e):-m is 2-1, move(1,d,e,), informa(d,), move(1,e,,d). Su. 5 (2) move(1,d,e,):-m is 1-1, move(0,d,,e), informa(d,e), move(0,,e,d). Su. 7 (2) move(1,e,,d):-m is 1-1, move(0,e,,d), informa(e,), move(0,,d,e). Su. hanoi(n):-move(n,e,,d). (1) move(0,_,_,_):-!. (2) move(n,a,b,c):-m is N-1, move(m,a,c,b), informa(a,b), move(m,c,b,a). informa(a,b):- write('mover DISCO DE '), write(a),write(' PARA '),write(b),nl. 40 Estruturas de Controlo do PROLOG Em PROLOG temos 4 estruturas de ontrolo prinipais: true tem sempre suesso fail Falha sempre repeat tem sempre suesso, quando se volta para trás por baktraking e se passa pelo repeat, este tem sempre suesso e obriga a ir para a frente! lê-se ut, uma vez atingida uma solução para o que está antes do! Já não será possível voltar para trás (antes do ut) pelo proesso de baktraking 41 5

O true Se não existisse em PROLOG o true poderia ser implementado pelo seguinte fato: true. Vejamos um exemplo onde o true faz sentido idade1(c):- fia(c,p), ((P==portugal,write(C),write( é portuguesa ), nl);true). Se não tivéssemos o true oorreria uma falha se C não fosse uma idade portuguesa, mas o que queremos é que tenha suesso se C for uma idade e para o aso partiular de ser portuguesa deve apareer uma mensagem esrita indiando isso 42 O fail O fail obriga à oorrênia de uma falha, é útil no raioínio pela negativa Vejamos um exemplo usando o fail sem_preedentes(x):-preede(_,x),!,fail. sem_preedentes(_). preede(a,b). preede(a,). preede(,d). preede(b,e). preede(f,h). preede(d,h). preede(g,i). preede(e,i). 43 6