Linguagens de Programação Programação Lógica (Prolog)

Documentos relacionados
Paradigmas de Linguagens de Programação. Linguagens de Programação Lógicas

Programação Orientada a Objetos. Programação Lógica

Prolog. MATA56 - Paradigmas de Linguagens de Programação, UFBA, Prof. Rodrigo Rocha Prolog. Iniciando.

Linguagens Lógicas. Aluno: Victor Rocha

Fundamentos. Paradigma de Programação Lógico. Marco A L Barbosa

Linguagens de Programação Apresentação da Disciplina

2 Paradigmas de linguagens de programação João B. Rocha- Junior. As linguagens evoluem com o passar do tempo

Prof. Marcos A. Schreiner. 15 de junho de Prof. Marcos A. Schreiner (UFPR) 15 de junho de / 18

Fundamentos e prática de Prolog

Prof. A. G. Silva. 24 de agosto de Prof. A. G. Silva Programação em Lógica 24 de agosto de / 1

Introdução. Esse programa recebeu o nome PROLOG (do francês PROgramation et LOGique ).

Linguagens de Programação Programação Funcional (Haskell)

Programação Lógica. Controle (Bactracking, Cut, Fail) Paulo Henrique Ribeiro Gabriel

Inteligência Artificial. Prolog. Aula 2 Introdução (cont.)

SCC Capítulo 5 Representação de Conhecimento através do Prolog

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

A linguagem Prolog. Sintaxe, terminologia e semântica informal: Os objectos de dados em Prolog são chamados termos.

Recursão PROGRAMAÇÃO EM LÓGICA. Recursão. Sonho Recursivo. Recursão. Recursão. Linguagem Prolog Parte IV

03/04/2016 LÓGICA MATEMÁTICA. Prof. Esp. Fabiano Taguchi. Introdução ao Prolog

PMR-3510 Inteligência Artificial Aula 2 - Resolução de problemas em IA

Introdução à Programação em Prolog

Listas em Prolog. Listas

FACULDADE LEÃO SAMPAIO

Algoritmos Estrutura Condicional

INF 1771 Inteligência Artificial

Lógica de primeira ordem (Capítulo 8 - Russell) Inteligência Artificial

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

Linguagens de Programação Aula 15

Lógica de Programação, Algoritmos e Estruturas de Dados

Programação Lógica. Programação Lógica PROLOG

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

BUSCA DE SOLUÇÕES EM PROLOG

UNIDADE ACADÊMICA: Faculdade de

Linguagem Haskell. Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação. Tiago Carneiro 19 Agosto 2013

Programação Lógica. (Capítulo 11) LÓGICA APLICADA A COMPUTAÇÃO. Professor: Rosalvo Ferreira de Oliveira Neto

Programação em Lógica. UCPEL/CPOLI/BCC Lógica para Ciência da Computação Luiz A M Palazzo Maio de 2010

Técnicas de Programação

Introdução à Lógica de Programação. Adaptação de Luis Otavio Alvares

Descrição do Mundo de Wumpus. Inteligência Artificial

2. Linguagem de Programação Prolog

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PROLOG PROF. CESAR A. TACLA UTFPR/CURITIBA

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

Variáveis o nome de uma variável pode ser qualquer sequência de caracteres alfanuméricos que começa com uma letra maiúscula ou com um underscore (_).

LÓGICA DE PROGRAMAÇÃO. Algoritmos Computacionais. Sérgio Carlos Portari Júnior

Árvores: conceitos gerais e representações

Protótipo de Software de Apoio ao Aprendizado da Linguagem de Programação Lógica Prolog

LINGUAGENS LÓGICAS E PROGRAMAÇÃO CONCORRENTE

Tipos de dados, constantes e variáveis. Prof.: Jesus

A única diferença entre o difícil e o impossível é que o último demora um pouco mais de tempo para ser alcançado..

Inteligência Artificial. Conceitos Gerais

Capítulo 3 Lógica de Primeira Ordem

Aula 2 Programação Lógica Sintaxe Prolog. Profa. Elaine Faria UFU -2014

Fundamentos de Lógica Matemática

Inteligência Computacional

Algoritmos - 5. Alexandre Diehl. Departamento de Física - UFPel

LINGUAGEM ALGORÍTMICA

Informática I. Aula 12. Aula 12-29/05/2006 1

Prof. A. G. Silva. 31 de agosto de Prof. A. G. Silva Programação em Lógica 31 de agosto de / 1

Fundamentos 1. Lógica de Predicados

Conferência Árvores de resolução SLD

Resolução de Problemas. Universidade Católica de Pelotas Engenharia da Computação Disciplina: Inteligência Artificial

Informá(ca para as Ciências e Engenharias Versão : C (Engenharia Civil) Pedro Barahona 2016 / 17

Raciocínio Automatizado

Linguagens Lógicas. Alunos: Josiane Novais Cláudio Moisés

# Estrutura de Dados # Aula 08 Recursão (conceito, utilização, exemplos) Prof. Leinylson Fontinele Pereira

Linguagem Haskell. Riocemar S. de Santana

Resolução de problemas por meio de busca. Capítulo 3 Inteligência Artificial Sistemas de Informação

Técnicas Alternativas de Programação

Pseudocódigo e Visualg

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

Algoritmos Lógica e Programação Prof. Me. Adelson Felipe Dias Nogueira

Introdução. Introdução. Motivação. Motivação. Solução INTELIGÊNCIA ARTIFICIAL CÁLCULO RELACIONAL (PARTE I)

ESTRUTURA DE DADOS (TCC )

INF 1771 Inteligência Artificial

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

Algoritmos I Aula 13 Linguagem de Programação Java

INTRODUÇÃO À COMPUTAÇÃO - EPET006 -

Linguagens Formais e Autômatos Apresentação da Disciplina

Estruturas de Dados com Jogos. Capítulo 8 Árvores

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

Ederson Luiz da Silva Ciência da Computação. Algoritmos e Programação

Recursividade Exaustiva e Backtracking

Semântica Operacional

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

Algoritmo e Programação Matemática

Estruturas de Repetição

Introdução a Programação. Curso: Sistemas de Informação Programação I José R. Merlin

Introdução à Matemática Discreta

Python Listas e Strings. Listas 23/11/2016. Por que usar listas? Listas. Listas - Solução. Listas - Problema

Disciplina: Introdução à Engenharia da Computação

Aprendizado de Máquina para a Automação da Aquisicão de Conhecimento

Linguagens de Programação

Inteligência Artificial. Sistemas Baseados em Conhecimento. Representação de Conhecimento (continuação)

Autômatos e Linguagens

Prolog: Programação em Lógica

Visão Geral... e conceitos básicos

Transcrição:

Linguagens de Programação Programação Lógica (Prolog) Andrei Rimsa Álvares

Sumário Introdução Prolog Unificação Mais sobre Prolog Resumo

INTRODUÇÃO Linguagens de Programação

Programação Impera?va vs. Lógica Impera@va Lógica Programas: mapeamento de entradas em saídas Modelo computacional: von Neumann (variáveis, atribuição, comandos,...) Es@lo procedural: "como fazer" Programação: instruções que executam comandos Computação: ações que alteram estado Programas: conhecimentos sobre um problema e não uma sequência de passos Modelo computacional: lógica matemá?ca Es@lo declara@vo: "o que fazer" Programação: simbólica (não numérica) Computação: se uma consulta pode ser deduzida de relações do programa

Programação Funcional vs. Lógica Programas: com mapeamentos Dado a, determine o valor de m(a) (sempre resultará em uma única resposta) Funcional Programas: com relações Lógica Dados a e b, verificar se R(a,b) é verdadeiro Dado a, encontrar todos os valores para y tal que R(a,y) é verdadeiro Dado b, encontrar todos os valores para x tal que R(x,b) é verdadeiro Encontre todos os valores para x e y, tal que R(x,y) é verdadeiro

Programação Lógica Nenhuma linguagem de programação em lógica pode explorar totalmente o potencial da lógica matemá?ca Pois o formalismo matemá?co não é implementável Exemplo: O Úl$mo Teorema de Fermat afirma que não existe nenhum conjunto de inteiros posi?vos x, y, z e n com n maior que 2 que sa?sfaça a seguinte equação: x n + y n = z n

Exemplo Hierarquia de uma família avo(x, Y) :- pai(x, Z), pai(z, Y). avo(x, Y) :- pai(x, Z), mae(z, Y). pai(carlos, joao). pai(joao, jose). mae(maria, joao).?- avo(carlos, jose). true.?- avo(carlos, joao). false.?- avo(manoel, carlos). false.?- avo(x, jose). X = carlos.

PROLOG Linguagens de Programação

Prolog Prolog é uma linguagem de programação lógica de propósito geral associada com inteligência ar?ficial e linguís?ca que possui suas raízes na lógica de primeira-ordem, uma lógica formal Prolog é declara?va, a lógica do programa é expressa em termos de relações, representada como fatos e regras; uma computação é iniciada executando uma pesquisa sobre essas relações A linguagem foi inicialmente concebida por um grupo coordenado por Alain Colmerauer em Marseille (França) no começo de 1970 Foi uma das primeiras linguagens de programação lógica e se mantém como a mais popular até hoje A linguagem é usada para prova de teoremas, sistemas especialistas, processamento de linguagens naturais,...

Elementos Valores Constantes: letras (começa com minúscula), números, texto Ex.: maria, 'maria', 123, "Texto" Estruturas (tuplas rotuladas) Ex.: ponto(5, 6), data(01, 01, 2000) Listas Ex.: [1,2,3], [maria, jose] Variáveis (começam com letra maiúscula) Ex.: X, Y, Estudante

Cláusulas de Horn Cláusulas de Horn são um subconjunto das cláusulas da lógica de predicados Forma geral B :- A 1, A 2,..., A n., onde cada A i é uma relação da forma R i (...) Interpretação se as condições A 1, A 2,... e A n forem verdadeiras, então a conclusão B é verdadeira (na forma procedural: se condições então conclusão) Se algum A i for falso, não se pode deduzir que B é falso, apenas que não se pode inferir

Cláusulas de Horn Nomenclatura Se n = 0 a cláusula é chamada de fato Se n >= 1 a cláusula é chamada de regra Toda cláusula termina com. (ponto).

Exemplo Exemplo somente com fatos Quem gosta de peixe??- gosta(x, peixe). X = maria. gosta(maria, peixe). gosta(pedro, vinho). gosta(maria, vinho). gosta(pedro, maria). Pedro e Maria se gostam??- gosta(maria, pedro), gosta(pedro, maria). false. Existe algo que Pedro e Maria (ambos) gostem??- gosta(pedro, X), gosta(maria, X). X = vinho.

Outro Exemplo Exemplo com fatos e regras estrela(sol). estrela(sirius). orbita(venus, sol). orbita(terra, sol). orbita(marte, sol). orbita(lua, terra). orbita(phobos, marte). orbita(deimos, marte). planeta(b) :- orbita(b, sol). satelite(b) :- orbita(b, P), planeta(p).?- orbita(venus, sol). true.?- orbita(b, marte). B = phobos ; B = deimos.?- orbita(b, venus). false.?- planeta(mercurio). false.?- planeta(x). X = venus ; X = terra ; X = marte.?- satelite(x). X = lua ; X = phobos ; X = deimos.

UNIFICAÇÃO Linguagens de Programação

Unificação Unificação é o nome do algoritmo usado por Prolog para determinar se existe uma maneira de instanciar as variáveis de dois predicados de modo a torná-los iguais. Predicado 1 Predicado 2 Unificação p(x, Y) q(x, Y) false p(x, Y) p(joao, jose) X = joao, Y = jose p(x, Y) p(joao, Z) X = joao, Y = Z p(x, X) p(1, 1) X = 1 p(x, X) p(1, W) X = 1, W = 1 p(x, X) p(1, 2) false p(x, X, 2) p(1, W, W) false p(g, jose) p(x, Y) G = X, Y = jose

Algoritmo O algoritmo de execução Faz uma busca em profundidade em uma árvore de pesquisa, com resolução de um obje?vo, onde a lista de cláusulas é pesquisada de cima para baixo Se a unificação com o lado esquerdo de uma cláusula for bem sucedida, então tenta-se resolver os sub-obje?vos do lado direito dessa cláusula (da esquerda para a direita) Pode haver retrocessos (backtracking) no caso de uma unificação não for bem sucedida, tentando explorar outras unificações alterna?vas Se todas as alterna?vas forem exploradas sem sucesso, então a resolução falha A resolução é sujeita à ordem em que as cláusulas foram escritas.

Exemplo Verificar se João e Mario são irmãos homem(mario). mae(joao, roberta). mae(mario, roberta). pai(joao, paulo). pai(mario, paulo). pais(x, M, P) :- mae(x, M), pai(x, P). irmao(x, Y) :- homem(y), pais(x, M, P), pais(y, M, P).?- irmao(joao, mario). Qual a resposta dessa consulta?

Exemplo Execução do algoritmo irmao(joao, mario) Com qual regra essa consulta pode ser unificada?

Exemplo Execução do algoritmo irmao(joao, mario) X = joao, Y = mario irmao(x, Y) Expandir a regra irmao(x, Y) com suas cláusulas a direita.

Exemplo Execução do algoritmo irmao(joao, mario) homem(mario) pais(joao, M, P) pais(mario, M, P) A cláusula homem(mario) é um fato.

Exemplo Execução do algoritmo irmao(joao, mario) homem(mario) pais(joao, M, P) pais(mario, M, P) Qual regra pode ser unificada nesse momento?

Exemplo Execução do algoritmo irmao(joao, mario) homem(mario) pais(joao, M, P) pais(mario, M, P) X 1 = joao, M 1 = M, P 1 = P pais(x 1, M 1, P 1 ) Expandir a regra pais(x 1, M 1, P 1 ) com suas cláusulas à direita.

Exemplo Execução do algoritmo irmao(joao, mario) homem(mario) pais(joao, M, P) pais(mario, M, P) M = M 1, P = P 1 mae(joao, M 1 ) pai(joao, P 1 ) Qual regra pode ser unificada nesse momento?

Exemplo Execução do algoritmo irmao(joao, mario) homem(mario) pais(joao, M, P) pais(mario, M, P) M = M 1, P = P 1 mae(joao, M 1 ) pai(joao, P 1 ) M 1 = roberta mae(joao, roberta) A cláusula mae(joao, roberta) é um fato.

Exemplo Execução do algoritmo irmao(joao, mario) homem(mario) pais(joao, M, P) pais(mario, M, P) M = M 1, P = P 1 mae(joao, M 1 ) pai(joao, P 1 ) M 1 = roberta Qual regra pode ser unificada nesse momento? mae(joao, roberta)

Exemplo Execução do algoritmo irmao(joao, mario) homem(mario) pais(joao, M, P) pais(mario, M, P) M = M 1, P = P 1 mae(joao, M 1 ) pai(joao, P 1 ) M 1 = roberta P 1 = paulo A cláusula pai(joao, paulo) é um fato. mae(joao, roberta) pai(joao, paulo)

Exemplo Execução do algoritmo irmao(joao, mario) homem(mario) pais(joao, M, P) pais(mario, M, P) M = M 1, P = P 1 mae(joao, M 1 ) pai(joao, P 1 ) M 1 = roberta P 1 = paulo Qual regra pode ser unificada nesse momento? mae(joao, roberta) pai(joao, paulo)

Exemplo Execução do algoritmo irmao(joao, mario) Nesse momento, sabe-se que M = roberta e P = paulo. homem(mario) pais(joao, M, P) pais(mario, M, P) M = M 1, P = P 1 X 2 = mario, M 2 = roberta, P 2 = paulo mae(joao, M 1 ) pai(joao, P 1 ) pais(x 2, M 2, P 2 ) M 1 = roberta P 1 = paulo mae(joao, roberta) pai(joao, paulo) Expandir a regra pais(x 2, M 2, P 2 ) com suas cláusulas à direita.

Exemplo Execução do algoritmo irmao(joao, mario) homem(mario) pais(joao, M, P) pais(mario, M, P) M = M 1, P = P 1 mae(joao, M 1 ) pai(joao, P 1 ) mae(mario, roberta) pai(mario, paulo) M 1 = roberta P 1 = paulo mae(joao, roberta) pai(joao, paulo) A cláusula mae(mario, roberta) é um fato.

Exemplo Execução do algoritmo irmao(joao, mario) homem(mario) pais(joao, M, P) pais(mario, M, P) M = M 1, P = P 1 mae(joao, M 1 ) pai(joao, P 1 ) mae(mario, roberta) pai(mario, paulo) M 1 = roberta P 1 = paulo mae(joao, roberta) pai(joao, paulo) A cláusula pai(mario, paulo) é um fato.

Exemplo Execução do algoritmo Todas as cláusulas foram unificadas, portanto a resposta é true. irmao(joao, mario) homem(mario) pais(joao, M, P) pais(mario, M, P) M = M 1, P = P 1 mae(joao, M 1 ) pai(joao, P 1 ) mae(mario, roberta) pai(mario, paulo) M 1 = roberta P 1 = paulo mae(joao, roberta) pai(joao, paulo)

Outro Exemplo Consultar quem é muito inteligente muito_inteligente(x) :- inteligente(x), simpatico(x). inteligente(x) :- vivo(x), humano(x). inteligente(x) :- golfinho(x). humano(x) :- homem(x). humano(x) :- mulher(x).?- muito_inteligente(x). vivo(chico). golfinho(flipper). mulher(maria). Qual a resposta dessa consulta? homem(chico). simpatico(flipper).

Outro Exemplo Execução do algoritmo muito_inteligente(x) Com qual regra essa consulta pode ser unificada?

Outro Exemplo Execução do algoritmo muito_inteligente(x) X = X 1 inteligente(x 1 ) simpatico(x 1 ) Quais regras podem ser unificadas agora?

Outro Exemplo Execução do algoritmo muito_inteligente(x) X = X 1 inteligente(x 1 ) simpatico(x 1 ) Quais regras podem ser unificadas agora?

Outro Exemplo Execução do algoritmo muito_inteligente(x) X = X 1 inteligente(x 1 ) simpatico(x 1 ) X 1 = X 2 vivo(x 2 ) humano(x 2 ) Expandida a primeira regra (na ordem do programa) que pôde ser unificada

Outro Exemplo Execução do algoritmo muito_inteligente(x) X = X 1 inteligente(x 1 ) simpatico(x 1 ) X 1 = X 2 vivo(x 2 ) humano(x 2 ) Qual regra pode ser unificada agora?

Outro Exemplo Execução do algoritmo muito_inteligente(x) X = X 1 inteligente(x 1 ) simpatico(x 1 ) X 1 = X 2 vivo(x 2 ) humano(x 2 ) X 2 = chico vivo(chico) vivo(chico) é um fato

Outro Exemplo Execução do algoritmo muito_inteligente(x) X = X 1 inteligente(x 1 ) simpatico(x 1 ) X 1 = X 2 vivo(x 2 ) humano(x 2 ) vivo(chico) X 2 = chico Agora sabe-se que X 2 = chico

Outro Exemplo Execução do algoritmo muito_inteligente(x) X = X 1 inteligente(x 1 ) simpatico(x 1 ) X 1 = X 2 vivo(x 2 ) humano(x 2 ) X 2 = chico homem(chico) é um fato vivo(chico) homem(chico)

Outro Exemplo Execução do algoritmo muito_inteligente(x) X = X 1 Sabe-se que X 1 = chico inteligente(x 1 ) simpatico(x 1 ) X 1 = X 2 vivo(x 2 ) humano(x 2 ) X 2 = chico Existe o fato simpatico(chico)? vivo(chico) homem(chico)

Outro Exemplo Execução do algoritmo muito_inteligente(x) X = X 1 inteligente(x 1 ) simpatico(x 1 ) X 1 = X 2 golfinho(x 2 ) Backtracking até o ponto onde havia outra alterna?va

Outro Exemplo Execução do algoritmo muito_inteligente(x) X = X 1 inteligente(x 1 ) simpatico(x 1 ) X 1 = X 2 golfinho(x 2 ) X 2 = flipper golfinho(flipper) é um fato golfinho(flipper)

Outro Exemplo Execução do algoritmo muito_inteligente(x) X = X 1 inteligente(x 1 ) simpatico(x 1 ) X 1 = X 2 golfinho(x 2 ) X 2 = flipper Agora sabe-se que X 1 = flipper golfinho(flipper)

Outro Exemplo Execução do algoritmo muito_inteligente(x) X = X 1 inteligente(x 1 ) simpatico(x 1 ) X 1 = X 2 X 1 = flipper golfinho(x 2 ) simpatico(flipper) X 2 = flipper golfinho(flipper)

Outro Exemplo Execução do algoritmo muito_inteligente(x) X = X 1 inteligente(x 1 ) simpatico(x 1 ) X 1 = X 2 X 1 = flipper golfinho(x 2 ) simpatico(flipper) X 2 = flipper golfinho(flipper) Todas as cláusulas foram unificadas, portanto X = flipper

MAIS SOBRE PROLOG Linguagens de Programação

Cláusulas Recursivas Pode-se definir cláusulas com recursão para executar laços Exemplo: consultar os descendentes?- descendente(manoel, madalena). true.?- descendente(manoel, carlos). true. pai(carlos,madalena). pai(manoel,felipe). mae(madalena,manoel). pais(x,y) :- pai(x,y). pais(x,y) :- mae(x,y). descendente(x,y) :- pais(y,x). descendente(x,y) :- pais(z,x), descendente(z,y).

Variáveis Anônimas Uma variável anônima é uma variável cujo valor instanciado não é relevante Exemplo: consultar se Felipe tem pai?- pai(_, felipe). true.

Listas Listas são um?po especial de estrutura Exemplos [1, 2, 3, 4]: lista com elementos de 1 a 4 [1 [2, 3, 4]]: lista com cabeça igual a 1 e o rabo igual a [2,3,4] [1, [2, 3], 4]: lista cujos elementos podem ser outras listas []: lista vazia

Unificação de Listas Exemplos de unificações de listas Predicado 1 Predicado 2 Unificação [X Y] [a, b, c] X = a, Y = [b, c] [X [Y Z]] [a, b, c, d] X = a, Y = b, Z = [c, d] [X Y] [a] X = a, Y = [] [X,Y Z] [a, b, c, d] X = a, Y = b, Z = [c, d]

Exemplos com Listas Verificar se existe um elemento na lista elemento(x, [ X _ ]). elemento(x, [ _ L ]) :- elemento(x, L).?- elemento(2, [2, 3, 5]). true.?- elemento(v, [2, 3, 5]). V = 2 ; V = 3 ; V = 5.

Exemplos com Listas Verificar se duas listas são iguais igual([],[]). igual([x L1], [X L2]) :- igual(l1, L2).?- igual([1, 2], [1, 2]). true.?- igual([],[]). true.?- igual([1, 2], X). X = [1, 2].?- igual([1, 2], [3, 4]). false.

Exemplos com Listas Concatenar duas listas concatenar([], L, L). concatenar([x L1], L2, [X L3]) :- concatenar(l1, L2, L3).?- concatenar([2, 3],[5, 7], L). L = [2, 3, 5, 7].?- concatenar([2, 3], L, [2, 3, 5, 7]). L = [5, 7].?- concatenar(l1, L2, [5, 7]). L1 = [], L2 = [5, 7] ; L1 = [5], L2 = [7] ; L1 = [5, 7], L2 = [].

Exemplos com Listas Remover um elemento da lista remover(x, [X T], T). remover(x, [Y T], [Y NT]) :- X \== Y, remover(x, T, NT).?- remover(2, [1,2,3,4], [1,3,4]). true.?- remover(2, [1,2,3,4], L). L = [1, 3, 4].?- remover(5, [1,2,3,4], L). false. Como remover todas as ocorrências do elemento?

Expressões Aritmé?cas O operador is é usado para realizar operações aritmé?cas Exemplo 1: densidade densidade(x,y) :- populacao(x,p), area(x,a), Y is P/A. Exemplo 2: MDC (Algoritmo de Euclides) mdc(x,x,x). mdc(x,y,z) :- X > Y, W is X-Y, mdc(w,y,z). mdc(x,y,z) :- Y > X, W is Y-X, mdc(x,w,z).

Expressões Aritmé?cas O operador is é usado para realizar operações aritmé?cas Exemplo 3: Fatorial fatorial(0, 1). fatorial(x, Y) :- X1 is X-1, fatorial(x1, Y1), Y is X*Y1. Exemplo 4: Somar os elementos de uma lista soma([], 0). soma([x L], S) :- soma(l, S1), S is X+S1.

RESUMO Linguagens de Programação

Paradigma Lógico vs Impera?vo Custo de tempo e espaço de armazenamento alto Backtracking Impera?va: erro de execução (se não puder prosseguir) Lógica: computação desfeita e um caminho alterna?vo é testado Ausência de?pos e declarações Variáveis se referem a indivíduos, ao invés de posições da memória (não há atribuição destru?va)

Paradigma Lógico vs Impera?vo Programas em lógica não possuem estruturas de controle no sen?do usual Manipulação de dados é feita inteiramente via unificação Atribuição simples Passagem de parâmetros Alocação de estruturas e escrita/leitura de campos de estruturas Um programa em lógica pode ficar mais Conciso (de 5 a 10 vezes menor) Limpo Legível

ISSO É TUDO PESSOAL! Linguagens de Programação