Sintaxe e Semântica de Programas Prolog

Documentos relacionados
Listas em Prolog. Listas

UNIDADE ACADÊMICA: Faculdade de

Listas em Haskell. Listas. Linguagem Haskell. Maria Adriana Vidigal de Lima. Faculdade de Computação - UFU. Setembro

Alfabeto, Cadeias, Operações e Linguagens

Aulas 10 e 11 / 18 e 20 de abril

Introdução à Programação em Prolog

Capítulo 1: Alfabetos, cadeias, linguagens

Matemática Básica Relações / Funções

Apostila 01 Fundamentação da Teoria da Computação e Linguagens Formais

Variáveis e Entrada de Dados Marco André Lopes Mendes marcoandre.googlepages.

Veja exemplos de sequências finitas e infinitas: Sequência finita: (5, 7, 9, 11, 13, 15, 17, 19) Sequência infinita (3, 5, 7, 11, 13, 17,...

Operações Fundamentais com Números

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca

Conceitos de Linguagens de Programação

Listas Lineares Ordenadas

Material Teórico - Módulo de Potenciação e Dízimas Periódicas. Números Irracionais e Reais. Oitavo Ano. Prof. Ulisses Lima Parente

PARECER DOS RECURSOS

Curso destinado à preparação para Concursos Públicos e Aprimoramento Profissional via INTERNET RACIOCÍNIO LÓGICO AULA 05

ESTRUTURA DE DADOS VETORES E LISTAS LINEARES

Pedro Vasconcelos DCC/FCUP. Programação Funcional 5 a Aula Definições recursivas

Notas de Aula Disciplina Matemática Tópico 03 Licenciatura em Matemática Osasco -2010

INF1010 Lista de Exercícios 2

Algoritmos e Estruturas de Dados I

Pedro Vasconcelos DCC/FCUP. Programação Funcional 14 a Aula Um verificador de tautologia

Árvores. Algoritmos e Estruturas de Dados I. José Augusto Baranauskas Departamento de Física e Matemática FFCLRP-USP

FUNDAMENTOS DA INFORMÁTICA. Sistemas de Numeração

Lógica Proposicional Fórmulas e Precedência de Operadores

INTRODUÇÃO À TEORIA DOS CONJUNTOS1

Textos de apoio às aulas práticas. Jaime Ramos, Francisco Miguel Dionísio

Programação Funcional Aulas 5 & 6

Programação: Vetores

Representações de Números Inteiros: Sinal e Magnitude e Representação em Excesso de k

Lista de Figuras Figura 1 1: Figura 1 2: Figura 1 3: Figura 1 4: Figura 1 5: Figura 1 6: Figura 1 7: Figura 2 1: Figura 2 2: Figura 2 3: Figura 2 4:

CÁLCULO I. 1 Número Reais. Objetivos da Aula

DEPARTAMENTO DE MATEMÁTICA E INFORMÁTICA DISCIPLINA: Matemática (8º Ano) METAS CURRICULARES/CONTEÚDOS ANO LETIVO 2016/

Conjunto Quociente e Classe de Equivalência (Alguns Exemplos e Definições)

MATEMÁTICA AULA 4 ÁLGEBRA CONJUNTOS. Conjunto é um conceito primitivo, e portanto, não tem definição.

Conceitos Básicos. Vocabulário Cadeias Linguagens Problema

Pedro Vasconcelos DCC/FCUP. Programação Funcional 8 a Aula Listas infinitas

Linguagens Formais. Aula 01 - Conceitos Básicos. Prof. Othon Batista Mestre em Informática

Teoria da Computação. Unidade 3 Máquinas Universais. Referência Teoria da Computação (Divério, 2000)

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

DAINF - Departamento de Informática

C.N.C. Programação Torno

Trabalho Prático 2 Mundo dos Blocos Alocação Dinâmica / Listas Encadeadas

Linguagens Formais e Autômatos

Teoria dos Grafos AULA 2

Números de Fibonacci. f n = f n 1 + f n 2. A condição inicial é de que há um par no primeiro mês e dois pares no segundo mês: f 1 = 1, f 2 = 2

Teoria das Linguagens. Linguagens Formais e Autómatos (Linguagens)

Teoria dos Grafos Aula 2

Introdução à Informática

Linguagens Formais e Autômatos P. Blauth Menezes

Listas de Prioridade. Fonte de consulta: Szwarcfiter, J.; Markezon, L. Estruturas de Dados e seus Algoritmos, 3a. ed. LTC.

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Programação Lógica. A Linguagem Prolog. Paulo Henrique Ribeiro Gabriel Faculdade de Computação Universidade Federal de Uberlândia

DISCIPLINA: MATEMÁTICA BÁSICA PROF. ELIONARDO ROCHELLY TEC. ALIMENTOS TEC. SISTEMAS INTERNET MATUTINO/VESPERTINO

Introdução à Programação Prolog (Tutorial) Introdução. Programação Lógica. Programação em Prolog. Programação Lógica. Definindo Relações por Fatos

Algoritmo. Conjunto finito de instruções que permitem a realização de uma tarefa. 2.1: Introdução 2. ALGORITMOS

Linguagens Formais e Autômatos 02/2015. LFA Aula 02. introdução 28/09/2015. Celso Olivete Júnior.

CAMINHOS DE RECOBRIMENTO QUE NÃO SE CRUZAM EM UMA REDE QUADRANGULAR 3 X 3 E 4 X 4

2 - Conjunto: conceito primitivo; não necessita, portanto, de definição. Exemplo: conjunto dos números pares positivos: P = {2,4,6,8,10,12,... }.

1 Conjuntos, Números e Demonstrações

Professor conteudista: Renato Zanini

AGRUPAMENTO de ESCOLAS Nº1 de SANTIAGO do CACÉM Ano Letivo 2013/2014 PLANIFICAÇÃO ANUAL

Aula 19 Conjuntos disjuntos (Union-find)

Pontifícia Universidade Católica do Rio de Janeiro / PUC-Rio Departamento de Engenharia Mecânica. ENG1705 Dinâmica de Corpos Rígidos.

Pseudolinguagem. BC0501 Linguagens de Programação t2 Aula 11. Prof. Alysson Ferrari ufabc.edu.br

Módulo de Números Naturais. Divisibilidade e Teorema da Divisão Euclideana. 8 ano E.F.

Escola E.B. 2, 3 de Quarteira nº2 Teste de avaliação - Matemática

Matemática em Libras. Parte 4 Quatro operações. Professora Surda Zanúbia Dada

Conceitos Básicos. Vocabulário Cadeias Linguagens Expressões Regulares Problema X Linguagem

Análise de Sinais e Sistemas

Linguagens de Programação Funcional

Exercícios Obrigatórios

Linguagens Formais e Autômatos 02/2016. LFA Aula 01 24/10/2016. Celso Olivete Júnior.

Aula 5. Mapas de Karnaugh. SEL Sistemas Digitais. Prof. Dr. Marcelo Andrade da Costa Vieira

LINGUAGENS FORMAIS E AUTÔMATOS

Linguagens Regulares. Prof. Daniel Oliveira

Working 03 : Conceitos Básicos II

Tipos Algébricos. Programação Funcional. Capítulo 11. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

BCC Introdu c ao ` a Programa c ao Portugol Guillermo C amara-ch avez UFOP 1/35

Anatomia do motor de um programa de xadrez. Hugo Vinicius M. D. Santana Orientador: José Coelho de Pina

Pedro Vasconcelos DCC/FCUP. Programação Funcional 13 a Aula Definição de tipos

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

Linguagem Haskell. Riocemar S. de Santana

Ordenação Externa. Ordenação Externa. Ordenação Externa. Ordenação Externa

INTRODUÇÃO À TEORIA DOS CONJUNTOS

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Programação Aplicada à Engenharia

Linguagens Formais e Autômatos (LFA)

INE Fundamentos de Matemática Discreta para a Computação

8.º Ano. Planificação Matemática 16/17. Escola Básica Integrada de Fragoso 8.º Ano

ESCOLA E B 2,3/S MIGUEL LEITÃO DE ANDRADA - AGRUPAMENTO DE ESCOLAS DE PEDRÓGÃO GRANDE DEPARTAMENTO DAS CIÊNCIAS EXATAS 2015/2016

Teoria da Computação. Unidade 1 Conceitos Básicos. Referência Teoria da Computação (Divério, 2000)

Interpolação polinomial: Diferenças divididas de Newton

Transcrição:

Sintaxe e Semântica de Programas Prolog Esta aula trata da sintaxe e semântica de conceitos básicos em Prolog relacionados à manipulação de listas Lista é uma das estruturas mais simples em Prolog, muito comum em programação não numérica Ela é uma sequência ordenada de elementos Uma lista pode ter qualquer comprimento Inteligência Artificial José Augusto Baranauskas Departamento de Física e Matemática FFCLRP-USP Sala 228 Bloco P2 Fone (16) 602-4439 E-mail: augusto@ffclrpuspbr URL: http://wwwfmrpuspbr/augusto Por exemplo uma lista de elementos tais como ana, tênis, pedro pode ser escrita em Prolog como: [ana, tênis, pedro] 2 O uso de colchetes é apenas uma melhoria da notação, pois internamente listas são representadas como árvores, assim como todos objetos estruturados em Prolog Para entender a representação Prolog de listas, é necessário considerar dois casos: A lista é vazia, escrita como [ ] em Prolog Uma lista (não vazia) consiste: no primeiro item, chamado cabeça (head) da lista na parte restante da lista, chamada cauda (tail) No exemplo [ana, tênis, pedro] ana é a Cabeça da lista [tênis, pedro] é a Cauda da lista A cabeça de uma lista pode ser qualquer objeto (inclusive uma lista); a cauda precisa que ser uma lista A Cabeça e a Cauda são então combinadas em uma estrutura pelo functor especial (Cabeça, Cauda) Como a Cauda é uma lista, ela é vazia ou ela tem sua própria cabeça e sua cauda 3 4 Assim, para representar listas de qualquer comprimento, nenhum princípio adicional é necessário O exemplo [ana, tênis, pedro] é representando como o termo: (ana, (tênis, (pedro, []))) O programador pode escolher ambas notações ana tênis?- = [a,b,c], = (a,(b,(c,[]))) = [a, b, c] = [a, b, c]?- Hobbies1 = (tênis, (música,[])), Hobbies2 = [esqui, comida], L = [ana,hobbies1,pedro,hobbies2] Hobbies1 = [tênis,música] Hobbies2 = [esqui,comida] L = [ana, [tênis,música], pedro, [esqui,comida]] pedro [ ] 5 6 1

É possível tratar a cauda como um objeto simples Por exemplo, L = [a,b,c] pode ser escrito como Cauda = [b,c] L = (a,cauda) Para expressar isso, Prolog fornece uma notação alternativa, a barra vertical, que separa a cabeça da cauda L = [a Cauda] A notação é geral por permitir qualquer número de elementos seja seguido por e o restante da lista: [a,b,c] = [a [b,c]] = [a,b [c]] = [a,b,c [ ]] 7 8 Unificação em Unificação em 9 10 Unificação em Unificação em na 11 12 2

Unificação em Unificação em na na no issexto Z=[ ] no issexto Z=[ ] Não unifica 13 14 Operações em Freqüentemente, é necessário realizar operações em listas, por exemplo, buscar um elemento que faz parte de uma lista Para isso, a recursão é o recurso mais amplamente empregado Para verificar se um nome está na lista, é preciso verificar se ele está na cabeça ou se ele está na cauda da lista Se o final da lista for atingido, o nome não está na lista Inicialmente, é necessário definir o nome do predicado que verifica se um elemento X pertence ou não a uma lista Y, por exemplo, pertence(x,y) A primeira condição especifica que um elemento X pertence à lista se ele está na cabeça dela: pertence(x,[x Z]) A segunda condição especifica que um elemento X pertence à lista se ele pertencer à sua cauda: pertence(x,[w Z]) :- pertence(x,z) 15 16 Sempre que um programa recursivo é definido, deve-se procurar pelas condições limites (ou condições de parada) e pelo caso recursivo: pertence(elemento,[elemento Cauda]) pertence(elemento,[cabeca Cauda]) :- pertence(elemento,cauda) Após a definição do programa, é possível interrogá-lo Por exemplo:?- pertence(a,[a,b,c]) Yes?- pertence(d,[a,b,c]) no?- pertence(x,[a,b,c]) X = a ; X = b ; X = c ; no Entretanto, se as perguntas forem:?- pertence(a,x)?- pertence(x,y) Deve-se observar que cada uma delas tem infinitas respostas, pois existem infinitas listas que validam essas perguntas para o programa pertence/2 17 18 3

Modo de Chamada de Predicados Para documentar como um predicado deve ser chamado, utiliza-se a notação (como comentário no programa): + o argumento é de entrada (deve estar instanciado) o argumento é de saída (não deve estar instanciado)? o argumento é de entrada e saída (pode ou não estar instanciado) O predicado pertence/2 documentado com o modo de chamada é: % pertence(?elemento, +Lista) pertence(e, [E _]) pertence(e, [_ Cauda]) :- pertence(e,cauda) Predicado Último Elemento de uma Lista 1 Se a lista tem apenas um elemento, este elemento é seu último elemento; 2 O último elemento de uma lista com mais de um elemento é o último da cauda da lista % ultimo(+l,?e) ultimo([e],e) ultimo([_ Cauda],E):- ultimo(cauda,e) 19 20 Predicado Inserção Inserção na primeira posição O objetivo deste predicado consiste em concatenar um elemento E com uma lista L gerando L1 % insere(?/+e,?/+l,+/?l1) insere(e,l,[e L]) Inserção na última posição O objetivo deste predicado consiste em concatenar uma lista L com um elemento E gerando L1 % insere(?/+e,?/+l,+/?l1) insere(e,[],[e]) insere(e,[cab Cauda],[Cab Cauda1]) :- insere(e,cauda,cauda1) Predicado Elementos Consecutivos 1 Dois elementos E1 e E2 são consecutivos em uma lista, se forem o 1º e o 2º elementos ou 2 Se forem consecutivos na cauda da lista % consecutivos(?e1,?e2,+l) consecutivos(e1,e2,[e1,e2 _]) consecutivos(e1,e2,[_ Cauda]):- consecutivos(e1,e2,cauda)?- consecutivos(e1,e2,) 21 22 Predicado Soma de Elementos Numéricos 1 Se a lista for vazia, a soma é zero ou 2 Se a lista for [Elem Cauda], a soma é a soma dos elementos da Cauda mais Elem % soma(+l,?s) (+L,-S) soma([],0) soma([elem Cauda],S):- soma(cauda,s1), S is S1+Elem Predicado Soma de Elementos Numéricos O que acontece se considerarmos o predicado abaixo? % soma(?l,+s) soma([],0) soma([elem Cauda],S):- S is S1+Elem, soma(cauda,s1) Prolog exige que S1 e Elem estejam instanciados e por isso ocorrerá um erro 23 24 4

Predicado N-ésimo Elemento de uma Lista 1 O primeiro elemento de uma lista é a cabeça ou 2 O n-ésimo elemento de uma lista é o (n-1)-ésimo elemento de sua cauda % n_esimo(?n,?e,+l) n_esimo(1,elem,[elem _]) n_esimo(n,elem,[_ Cauda]):- n_esimo(m,elem,cauda), N is M+1 Predicado Pegar elementos de uma Lista, dada a Lista de posições 1 Pegar nenhum elemento de uma lista é obter uma lista vazia ou 2 Seja a lista de posições [M N] e a lista de elementos L; pegar os elementos de L especificados na lista de posições significa pegar o M-ésimo elemento de L e os elementos especificados na cauda N da lista de posições % pegar(+lp,+le,?l) pegar([],_,[]) pegar([m N],L,):- n_esimo(m,x,l), pegar(n,l,y) 25 26 Predicado de Concatenação (Exercício) Concatenar duas listas, formando uma terceira: 1 Se o primeiro argumento é a lista vazia, então o segundo e o terceiro argumentos devem ser o mesmo 2 Se o primeiro argumento é a lista não-vazia, então ela tem uma cabeça e uma cauda da forma [X L1], concatenar [X L1] com uma segunda lista L2 resulta na lista [X L3], onde L3 é a concatenação de L1 e L2 Predicado de Concatenação [X L1] X L1 L2 L3 X L3 [X L3] 27 28 Exercícios 1 Definir uma nova versão do predicado último,que encontra o último elemento de uma lista, utilizando a concatenação de listas 2 Definir predicado penúltimo 3 Encontrar o comprimento de uma lista (Sugestão: A1 is A+1) 4 Retirar elementos de uma lista Slides baseados em: Bratko, I; Prolog Programming for Artificial Intelligence, 3rd Edition, Pearson Education, 2001 Clocksin, WF; Mellish, CS; Programming in Prolog, 5th Edition, Springer-Verlag, 2003 Programas Prolog para o Processamento de e Aplicações, Monard, MC & Nicoletti, MC, ICMC-USP, 1993 Material elaborado por José Augusto Baranauskas Adaptado por Huei Diana Lee 29 30 5