Programação Lógica PROLOG. Programação Lógica: Prolog
|
|
- Mafalda Raminhos Vilarinho
- 5 Há anos
- Visualizações:
Transcrição
1 Programação Lógica PROLOG PROGRAMAÇÃO LÓGICA COM PROLOG 1 Programação Lógica: Prolog Programação Lógica: um estilo diferente de programar, muito diferente das linguagens de programação convencionais como C, C++ ou Java Os adeptos da Programação Lógica diriam que diferente quer dizer mais claro, mais simples e geralmente melhor! PROGRAMAÇÃO LÓGICA COM PROLOG 2
2 Programação Lógica: Prolog A Linguagem de programação lógica mais utilizada é, de longe, o Prolog (Programming in Logic) O Prolog tem sido largamente utilizado no desenvolvimento de aplicações complexas, especialmente no campo da Inteligência Artificial PROGRAMAÇÃO LÓGICA COM PROLOG 3 Programação Lógica: Prolog Apesar de ser uma linguagem de programação de aplicação genérica, o seu ponto-forte centra-se na computação simbólica e não na numérica PROGRAMAÇÃO LÓGICA COM PROLOG 4
3 Programação Lógica: Prolog O primeiro aspeto a chamar a atenção no Prolog é o facto de os programas parecerem muito mais simples do que programas equivalentes noutras linguagens PROGRAMAÇÃO LÓGICA COM PROLOG 5 Programação Lógica: Prolog Nalgumas linguagens até a simples escrita do 1.º programa de teste mais comum (escrever Olá Mundo! ) não é fácil. Em Prolog é muito simples: write( Olá Mundo! ). PROGRAMAÇÃO LÓGICA COM PROLOG 6
4 Programação Lógica: Prolog As linguagens de programação convencionais são procedimentais: definem um conjunto de instruções que são executadas umas a seguir às outras, em sequência. Os programas Prolog são programas declarativos (apesar de, inevitavelmente, todos terem uma faceta procedimental). PROGRAMAÇÃO LÓGICA COM PROLOG 7 Programação Lógica: Prolog Os programas Prolog baseiam-se na Lógica para construir conclusões válidas a partir de factos ou evidências que são disponibilizados. São constituídos por apenas 2 elementos: factos e regras que o sistema Prolog lê e armazena. PROGRAMAÇÃO LÓGICA COM PROLOG 8
5 Programação Lógica: Prolog O utilizador só tem de fazer perguntas (queries) às quais o sistema Prolog responde usando os factos e regras que armazenou. PROGRAMAÇÃO LÓGICA COM PROLOG 9 Programação Lógica: Prolog Exemplo: um conjunto de perguntas e respostas sobre animais O programa: cao(boby). cao(pantufa). cao(milord). gato(soneca). gato(tigre). gato(macaco). animal(x):- cao(x). PROGRAMAÇÃO LÓGICA COM PROLOG 10
6 Programação Lógica: Prolog É constituído por 6 factos: boby, pantufa e milord são cães; soneca, tigre e macaco são gatos; cao(boby). cao(pantufa). cao(milord). gato(soneca). gato(tigre). gato(macaco). animal(x):- cao(x). PROGRAMAÇÃO LÓGICA COM PROLOG 11 Programação Lógica: Prolog E por 1 regra: qualquer coisa (seja X) é um animal se for um cão. cao(boby). cao(pantufa). cao(milord). gato(soneca). gato(tigre). gato(macaco). animal(x):- cao(x). PROGRAMAÇÃO LÓGICA COM PROLOG 12
7 Programação Lógica: Prolog Determinar se boby é um animal envolve uma forma simples de raciocínio lógico: Uma vez que e que Qualquer X é um animal se for um cão boby é um cão Dedução boby é um animal PROGRAMAÇÃO LÓGICA COM PROLOG 13 Programação Lógica: Prolog Este tipo de raciocínio é fundamental para programar em Prolog Até uma simples pergunta como?- cao(boby). pode ser vista como um pedido ao sistema Prolog para provar algo (neste caso que boby é um cão) PROGRAMAÇÃO LÓGICA COM PROLOG 14
8 Programação Lógica: Prolog Ficam assim apresentados todos os elementos (3 no total) necessários para a programação lógica em Prolog: factos, regras e perguntas (queries). Não há outros: Tudo o resto é construído a partir deles. PROGRAMAÇÃO LÓGICA COM PROLOG 15 Programação Lógica: Prolog Sistema Prolog SWI-Prolog's home PROGRAMAÇÃO LÓGICA COM PROLOG 16
9 Programação Lógica: Prolog?- system prompt Indica que o sistema Prolog está à espera que o utilizador introduza uma sequência de um ou mais objetivos (perguntas), seguida de ponto final Exemplo:?-write( Olá Mundo! ),nl,write( Bem-vindo ao Prolog ),nl. PROGRAMAÇÃO LÓGICA COM PROLOG 17 Programação Lógica: Prolog Exemplo:?-write( Olá Mundo! ),nl,write( Bem-vindo ao Prolog ),nl. Resultado: Olá Mundo! Bem-vindo ao Prolog Yes Yes: indica que a sequência de objetivos foi bem sucedida PROGRAMAÇÃO LÓGICA COM PROLOG 18
10 Programação Lógica: Prolog Do ponto de vista do sistema, o importante é saber se a sequência de objetivos indicada é ou não bem sucedida A restante informação apresentada no ecran é considerada muito menos importante e descrita como um mero efeito secundário PROGRAMAÇÃO LÓGICA COM PROLOG 19 Programação Lógica: Prolog Uma sequência de um ou mais objetivos introduzidos pelo utilizador é designada uma pergunta (querie) PROGRAMAÇÃO LÓGICA COM PROLOG 20
11 Termos Prolog Termos: alguns exemplos boby cao(milord) X gato(x) PROGRAMAÇÃO LÓGICA COM PROLOG 21 Termos Prolog Números: PROGRAMAÇÃO LÓGICA COM PROLOG 22
12 Termos Prolog Átomos: Constantes que não têm valor numérico Podem ser escritos de 3 maneiras 1. Qualquer sequência de uma ou mais letras, algarismos e underscore, começando com letra minúscula: john today_is_wednesday a32_bcd PROGRAMAÇÃO LÓGICA COM PROLOG 23 Termos Prolog Átomos: 2. Qualquer sequência de caracteres entre plicas ( ), incluindo espaços e letras maiúsculas: Today is Wednesday 32abc today-is-wednesday PROGRAMAÇÃO LÓGICA COM PROLOG 24
13 Termos Prolog Átomos: 3. Qualquer sequência de um ou mais caracteres especiais de uma lista que inclui os seguintes + - * / > < = & : +++ >= > +-- PROGRAMAÇÃO LÓGICA COM PROLOG 25 Termos Prolog Variáveis: Qualquer sequência de uma ou mais letras, algarismos e underscore, começando por uma letra maiúscula ou por um underscore: X Author _123A _ (variável anónima) PROGRAMAÇÃO LÓGICA COM PROLOG 26
14 Termos Prolog Termos Compostos: functor(t 1,t 2,,t n ), n>=1 functor: átomo n.º de argumentos: aridade Exemplos: gosta(paulo,prolog) ler(x) cao(boby) PROGRAMAÇÃO LÓGICA COM PROLOG 27 Termos Prolog Listas: Uma lista pode ser considerada um termo composto especial Podem ter um número de argumentos ilimitado, indicados entre [ ] e separados por vírgulas O elemento de uma lista pode ser de qualquer tipo, incluindo outra lista PROGRAMAÇÃO LÓGICA COM PROLOG 28
15 Termos Prolog Listas: Exemplos [dog, cat, fish, man] [[john,28], [mary,56,teacher]] [ ] lista vazia PROGRAMAÇÃO LÓGICA COM PROLOG 29 Termos Prolog - Resumo Termos Termos Simples Constantes Variáveis Átomos Números Termos Compostos PROGRAMAÇÃO LÓGICA COM PROLOG 30
16 Cláusulas e Predicados Cláusulas: Um programa Prolog consiste numa sucessão de cláusulas Uma cláusula pode ser definida em mais do que uma linha, ou podemos ter várias cláusulas definidas na mesma linha Uma cláusula termina com um ponto final seguido de pelo menos um espaço branco (espaço ou enter) Podemos ter 2 tipos de cláusulas: factos ou regras PROGRAMAÇÃO LÓGICA COM PROLOG 31 Cláusulas e Predicados Os factos têm a seguinte forma: head. head: a cabeça do facto Deve ser um átomo ou um termo composto Átomos e termos compostos: call terms PROGRAMAÇÃO LÓGICA COM PROLOG 32
17 Cláusulas e Predicados As regras têm a seguinte forma: head:-t 1,t 2, t k. (k>=1) head: a cabeça do facto ou da regra (deve ser um call term) :- deve ser lido se (neck operator) t 1,t 2, t k : o corpo da cláusula (ou regra) constituído por um ou mais componentes, separados por vírgulas Os componentes são objetivos (goals) e as vírgulas devem ser lidas como e (conjunção) PROGRAMAÇÃO LÓGICA COM PROLOG 33 Cláusulas e Predicados A regra deve ser lida: head é verdadeiro se t 1,t 2,,t k são todos verdadeiros Exemplos: animal_grande(x):-animal(x),grande(x). avo(x,y):-pai(x,z),pai(z,y). go:-write( Ola mundo ),nl. PROGRAMAÇÃO LÓGICA COM PROLOG 34
18 Cláusulas e Predicados Exemplo: Definição dos predicados progenitor, pai e mae progenitor(maria,alberto). progenitor(x,y):-pai(x,y). progenitor(x,y):-mae(x,y). pai(joao,pedro). mae(ana,pedro). Este programa tem 5 cláusulas (3 factos e 2 regras) Nas 3 primeiras a cabeça (head) é um termo composto com functor progenitor e aridade 2 (2 argumentos) PROGRAMAÇÃO LÓGICA COM PROLOG 35 Cláusulas e Predicados É possível que o programa inclua cláusulas em que progenitor também é a cabeça mas com aridade diferente: progenitor(joao). progenitor(x):-filho(x,y). /* X é progenitor se X tem um filho Y */ PROGRAMAÇÃO LÓGICA COM PROLOG 36
19 Cláusulas e Predicados É ainda possível que, no mesmo programa, progenitor seja usado como átomo (predicado sem argumentos), como no seguinte facto: animal(progenitor). PROGRAMAÇÃO LÓGICA COM PROLOG 37 Cláusulas e Predicados As cláusulas anteriores definem 2 predicados com o nome progenitor, um com aridade 2 e outro com aridade 1. Para os distinguirmos, podemos indicar progenitor/2 progenitor/1 PROGRAMAÇÃO LÓGICA COM PROLOG 38
20 Cláusulas e Predicados No exemplo seguinte podemos identificar um predicado sem argumentos: go/0 go:-progenitor(joao,b), write( João tem um filho chamado ), write(b),nl. PROGRAMAÇÃO LÓGICA COM PROLOG 39 Cláusulas e Predicados Interpretação de Regras: As regras têm uma interpretação declarativa e uma interpretação procedimental apanha(x,y):-cao(x),gato(y), write(x),write( apanha ),write(y),nl. PROGRAMAÇÃO LÓGICA COM PROLOG 40
21 Cláusulas e Predicados Interpretação Declarativa: apanha(x,y) é verdade se cao(x) é verdade e gato(y) é verdade e write(x) é verdade e etc apanha(x,y):-cao(x),gato(y), write(x),write( apanha ),write(y),nl. PROGRAMAÇÃO LÓGICA COM PROLOG 41 Cláusulas e Predicados Interpretação Procedimental: Para satisfazer apanha(x,y), primeiro satisfazer cao(x), depois satisfazer gato(y), depois satisfazer write(x), etc apanha(x,y):-cao(x),gato(y), write(x),write( apanha ),write(y),nl. PROGRAMAÇÃO LÓGICA COM PROLOG 42
22 Cláusulas e Predicados Os factos são de um modo geral interpretados declarativamente: cao(boby). é lido boby é um cão. PROGRAMAÇÃO LÓGICA COM PROLOG 43 Cláusulas e Predicados A ordem das cláusulas que definem um predicado e a ordem dos objetivos (goals) no corpo de cada regra são irrelevantes para a interpretação declarativa, mas de fundamental importância para a interpretação procedimental. PROGRAMAÇÃO LÓGICA COM PROLOG 44
23 Cláusulas e Predicados As cláusulas na base de dados do sistema Prolog são examinadas de cima para baixo. Se necessário, os objetivos no corpo de uma regra são examinados da esquerda para a direita. PROGRAMAÇÃO LÓGICA COM PROLOG 45 Cláusulas e Predicados O programa do utilizador é constituído por factos e regras que definem novos predicados: predicados user-defined. Os predicados pré-definidos no Sistema Prolog designam-se built-in predicates (BIP). Exemplos: write/1, nl/0, repeat/0, member/2, append/3, consult/1, halt/0, PROGRAMAÇÃO LÓGICA COM PROLOG 46
24 Cláusulas e Predicados Recursividade É possível utilizar definições recursivas: definir predicados em função deles próprios. Recursividade direta: Predicado pred1 é definido em função dele próprio. Recursividade indireta: Predicado pred1 é definido por intermédio de pred2, que por sua vez é definido em função de pred3, que é definido utilizando pred1. PROGRAMAÇÃO LÓGICA COM PROLOG 47 Cláusulas e Predicados Exemplo: gosta(joao,x):-gosta(x,y),cao(y). pode ser interpretado como João gosta de qualquer um que goste pelo menos de um cão PROGRAMAÇÃO LÓGICA COM PROLOG 48
25 Cláusulas e Predicados Variáveis Variáveis em objetivos: pode ser interpretado como querendo significar encontrar valores das variáveis que satisfaçam o objetivo.?- animal_grande(a). Este objetivo pode ser lido como encontrar um valor para A de modo que animal_grande(a) seja satisfeito. PROGRAMAÇÃO LÓGICA COM PROLOG 49 Cláusulas e Predicados Atribuição de valores a variáveis Inicialmente, nenhuma variável numa cláusula tem valor atribuído. Quando o Sistema Prolog avalia o objetivo, a algumas variáveis pode ser atribuído um valor. Uma variável que tenha recebido um valor pode ficar novamente sem valor atribuído e poderá voltar a receber um valor diferente com o processo de retrocesso do Sistema Prolog (backtracking). PROGRAMAÇÃO LÓGICA COM PROLOG 50
26 Cláusulas e Predicados Âmbito lexical de variáveis Numa cláusula como progenitor(x,y):-pai(x,y). as variáveis X e Y não têm qualquer relação com quaisquer outras variáveis com o mesmo nome utilizadas noutra situação. O âmbito lexical de uma variável é a cláusula em que ela aparece. PROGRAMAÇÃO LÓGICA COM PROLOG 51 Cláusulas e Predicados Variáveis de quantificação universal Se uma variável aparece na cabeça de uma regra ou de um facto, significa que a regra ou facto se aplica para todos os possíveis valores da variável. PROGRAMAÇÃO LÓGICA COM PROLOG 52
27 Cláusulas e Predicados Por exemplo, a regra: animal_grande(x):-cao(x),grande(x). pode ser lida como para todos os valores de X, X é um animal grande se X é um cão e se X é grande. A variável X é dita ser quantificada universalmente. PROGRAMAÇÃO LÓGICA COM PROLOG 53 Cláusulas e Predicados Variáveis de quantificação existencial Suponhamos as seguintes cláusulas: pessoa(joana,borges,feminino,28,arquitecta). pessoa(francisco,silva,masculino,62,medico). pessoa(paulo,sousa,masculino,45,canalizador). pessoa(martim,santos,masculino,23,quimico). pessoa(maria,silva,feminino,24,programadora). pessoa(martim,ribeiro,masculino,47,solicitador). homem(a):-pessoa(a,b,masculino,c,d). PROGRAMAÇÃO LÓGICA COM PROLOG 54
28 Cláusulas e Predicados As primeiras 6 cláusulas constituem a definição do predicado pessoa/5 pessoa(joana,borges,feminino,28,arquitecta). pessoa(francisco,silva,masculino,62,medico). pessoa(paulo,sousa,masculino,45,canalizador). pessoa(martim,santos,masculino,23,quimico). pessoa(maria,silva,feminino,24,programadora). pessoa(martim,ribeiro,masculino,47,solicitador). homem(a):-pessoa(a,b,masculino,c,d). PROGRAMAÇÃO LÓGICA COM PROLOG 55 Cláusulas e Predicados A última cláusula é uma regra: para todo o A, A é um homem se A é uma pessoa cujo género é masculino, para pelo menos um valor das variáveis B, C e D pessoa(joana,borges,feminino,28,arquitecta). pessoa(francisco,silva,masculino,62,medico). pessoa(paulo,sousa,masculino,45,canalizador). pessoa(martim,santos,masculino,23,quimico). pessoa(maria,silva,feminino,24,programadora). pessoa(martim,ribeiro,masculino,47,solicitador). homem(a):-pessoa(a,b,masculino,c,d). PROGRAMAÇÃO LÓGICA COM PROLOG 56
29 Cláusulas e Predicados Ou seja, Para todo o A, A é um homem se existir uma pessoa com nome A, apelido B, género masculino, idade C e ocupação D, para pelo menos um valor de B, C e D.?- homem(paulo). PROGRAMAÇÃO LÓGICA COM PROLOG 57 Cláusulas e Predicados As variáveis B, C e D não aparecem na cabeça do predicado homem: são variáveis de quantificação existencial. A variável A é de quantificação universal. PROGRAMAÇÃO LÓGICA COM PROLOG 58
30 Cláusulas e Predicados A variável anónima Para saber se existe uma cláusula que corresponda a alguém chamado paulo na base de dados, bastaria o seguinte:?- pessoa(paulo,apelido,sexo,idade,ocupacao). Apelido=sousa, Sexo=masculino, Idade=45, Ocupacao=canalizador PROGRAMAÇÃO LÓGICA COM PROLOG 59 Cláusulas e Predicados Em muitos casos, pode não ser importante saber o valor de todas as variáveis. Se basta saber se existe ou não alguém chamado paulo, seria mais simples fazer:?- pessoa(paulo,_,_,_,_). PROGRAMAÇÃO LÓGICA COM PROLOG 60
31 Cláusulas e Predicados O caracter _ (underscore) denota uma variável especial: a variável anónima É utilizada quando o valor da variável não é necessário. PROGRAMAÇÃO LÓGICA COM PROLOG 61 Cláusulas e Predicados Outros exemplos:?- pessoa(paulo,apelido,_,_,_). Apelido=sousa?- pessoa(martim,_,_,idade,_). Idade=23; Idade=47?- pessoa(martim,x,x,idade,x). no PROGRAMAÇÃO LÓGICA COM PROLOG 62
32 Unificação Unificação é o processo que efetua a correspondência entre termos e variáveis Prolog unifica mulher(x) com mulher(maria) instanciando a variável X com o átomo maria. PROGRAMAÇÃO LÓGICA COM PROLOG 63 Unificação Definição: Dois termos podem ser unificados se são o mesmo termo ou se contêm variáveis que podem ser uniformemente instanciadas por termos de tal modo que os termos resultantes são iguais PROGRAMAÇÃO LÓGICA COM PROLOG 64
33 Unificação Isto significa que: maria e maria unificam 42 e 42 unificam mulher(maria) e mulher(maria) unificam Também significa que: vicente e maria não unificam mulher(maria) e mulher(ana) não unificam PROGRAMAÇÃO LÓGICA COM PROLOG 65 Unificação E o que é que acontece com os termos: maria e X PROGRAMAÇÃO LÓGICA COM PROLOG 66
34 Unificação E o que é que acontece com os termos: maria e X mulher(z) e mulher(maria) PROGRAMAÇÃO LÓGICA COM PROLOG 67 Unificação E o que é que acontece com os termos: maria e X mulher(z) e mulher(maria) gosta(maria,x) e gosta(x,vicente) PROGRAMAÇÃO LÓGICA COM PROLOG 68
35 Instanciações Quando o Sistema Prolog unifica dois termos realiza todas as instanciações necessárias, de modo que os termos fiquem iguais Isto torna a unificação um poderoso mecanismo de programação PROGRAMAÇÃO LÓGICA COM PROLOG 69 Definição (revisão) 1/3 1. Se T 1 e T 2 forem constantes, então T 1 e T 2 podem ser unificados se forem o mesmo átomo ou o mesmo número. PROGRAMAÇÃO LÓGICA COM PROLOG 70
36 Definição (revisão) 2/3 1. Se T 1 e T 2 forem constantes, então T 1 e T 2 podem ser unificados se forem o mesmo átomo ou o mesmo número. 2. Se T 1 for uma variável e T 2 um termo de qualquer tipo, então T 1 e T 2 unificam, sendo T 1 instanciado com T 2 (e vice-versa). PROGRAMAÇÃO LÓGICA COM PROLOG 71 Definição (revisão) 3/3 1. Se T 1 e T 2 forem constantes, então T 1 e T 2 podem ser unificados se forem o mesmo átomo ou o mesmo número. 2. Se T 1 for uma variável e T 2 um termo de qualquer tipo, então T 1 e T 2 unificam, sendo T 1 instanciado com T 2 (e vice-versa) 3. Se T 1 e T 2 forem termos compostos podem ser unificados se: a) tiverem os mesmos functor e aridade, e b) todos os argumentos correspondentes podem ser unificados, e c) as instanciações de variáveis são compatíveis. PROGRAMAÇÃO LÓGICA COM PROLOG 72
37 Unificação em Prolog: =/2?- maria = maria.?- PROGRAMAÇÃO LÓGICA COM PROLOG 73 Unificação em Prolog: =/2?- maria = maria.?- maria = vicente. no?- PROGRAMAÇÃO LÓGICA COM PROLOG 74
38 Unificação em Prolog: =/2?- maria = X. X=maria?- PROGRAMAÇÃO LÓGICA COM PROLOG 75 Qual a resposta??- X=maria, X=vicente. PROGRAMAÇÃO LÓGICA COM PROLOG 76
39 Qual a resposta??- X=maria, X=vicente. no?- Porquê? PROGRAMAÇÃO LÓGICA COM PROLOG 77 Qual a resposta??- X=maria, X=vicente. no?- Porquê? Depois de avaliar o primeiro objetivo, o Sistema Prolog instanciou X com maria, de modo que depois já não a pode unificar com vicente. Assim, o segundo objetivo falha. PROGRAMAÇÃO LÓGICA COM PROLOG 78
40 Termos Compostos: Exemplo?- k(s(g),y) = k(x,t(k)). PROGRAMAÇÃO LÓGICA COM PROLOG 79 Termos Compostos: Exemplo?- k(s(g),y) = k(x,t(k)). X=s(g) Y=t(k)?- PROGRAMAÇÃO LÓGICA COM PROLOG 80
41 Termos Compostos: Exemplo?- k(s(g),t(k)) = k(x,t(y)). PROGRAMAÇÃO LÓGICA COM PROLOG 81 Termos Compostos: Exemplo?- k(s(g),t(k)) = k(x,t(y)). X=s(g) Y=k?- PROGRAMAÇÃO LÓGICA COM PROLOG 82
42 Mais um exemplo?- gosta(x,x) = gosta(joao,maria). PROGRAMAÇÃO LÓGICA COM PROLOG 83 Listas Uma lista é uma sequência finita de elementos Exemplos de listas em Prolog: [mia, vincent, jules, yolanda] [mia, robber(honeybunny), X, 2, mia] [ ] [mia, [vincent, jules], [butch, friend(butch)]] [[ ], dead(z), [2, [b,c]], [ ], Z, [2, [b,c]]] PROGRAMAÇÃO LÓGICA COM PROLOG 84
43 Listas Os elementos de uma lista representam-se entre parêntesis retos O comprimento (length) de uma lista é o número de elementos que a constituem Todos os tipos de termos Prolog podem ser elementos de uma lista A lista vazia, [ ], é uma lista especial PROGRAMAÇÃO LÓGICA COM PROLOG 85 Listas: Cabeça e cauda Uma lista não vazia é constituída por duas partes A cabeça (head) A cauda (tail) A cabeça é o primeiro elemento da lista A cauda é toda a parte restante A cauda é a lista que se obtém depois de se retirar o primeiro elemento (a cabeça) A cauda de uma lista é sempre uma lista PROGRAMAÇÃO LÓGICA COM PROLOG 86
44 Cabeça e cauda: Exemplo 1 [mia, vincent, jules, yolanda] Cabeça: Cauda: PROGRAMAÇÃO LÓGICA COM PROLOG 87 Cabeça e cauda: Exemplo 1 [mia, vincent, jules, yolanda] Cabeça: mia Cauda: PROGRAMAÇÃO LÓGICA COM PROLOG 88
45 Cabeça e cauda: Exemplo 1 [mia, vincent, jules, yolanda] Cabeça: mia Cauda: [vincent, jules, yolanda] PROGRAMAÇÃO LÓGICA COM PROLOG 89 Cabeça e cauda: Exemplo 2 [[ ], dead(z), [2, [b,c]], [ ], Z, [2, [b,c]]] Cabeça: Cauda: PROGRAMAÇÃO LÓGICA COM PROLOG 90
46 Cabeça e cauda: Exemplo 2 [[ ], dead(z), [2, [b,c]], [ ], Z, [2, [b,c]]] Cabeça: [ ] Cauda: PROGRAMAÇÃO LÓGICA COM PROLOG 91 Cabeça e cauda: Exemplo 2 [[ ], dead(z), [2, [b,c]], [ ], Z, [2, [b,c]]] Cabeça: [ ] Cauda: [dead(z), [2, [b,c]], [ ], Z, [2, [b,c]]] PROGRAMAÇÃO LÓGICA COM PROLOG 92
47 Cabeça e cauda: Exemplo 3 [dead(z)] Cabeça: Cauda: PROGRAMAÇÃO LÓGICA COM PROLOG 93 Cabeça e cauda: Exemplo 3 [dead(z)] Cabeça: dead(z) Cauda: PROGRAMAÇÃO LÓGICA COM PROLOG 94
48 Cabeça e cauda: Exemplo 3 [dead(z)] Cabeça: dead(z) Cauda: [ ] PROGRAMAÇÃO LÓGICA COM PROLOG 95 Cabeça e cauda da lista vazia A lista vazia não tem cabeça nem cauda Para o Sistema Prolog, [ ] é uma lista simples especial, sem qualquer estrutura interna A lista vazia tem um papel importante para os predicados recursivos no processamento de listas em Prolog PROGRAMAÇÃO LÓGICA COM PROLOG 96
49 O operador O Prolog tem um operador especial (built-in),, que pode ser utilizado para decompor uma lista nas respetivas cabeça e cauda O operador é uma facilidade-chave na definição de predicados Prolog para manipulação de listas PROGRAMAÇÃO LÓGICA COM PROLOG 97 O operador?- [Head Tail] = [mia, vincent, jules, yolanda]. Head = mia Tail = [vincent,jules,yolanda]?- PROGRAMAÇÃO LÓGICA COM PROLOG 98
50 O operador?- [X Y] = [mia, vincent, jules, yolanda]. X = mia Y = [vincent,jules,yolanda]?- PROGRAMAÇÃO LÓGICA COM PROLOG 99 O operador?- [X Y] = [ ]. no?- PROGRAMAÇÃO LÓGICA COM PROLOG 100
51 O operador?- [X,Y Tail] = [[ ], dead(z), [2, [b,c]], [], Z, [2, [b,c]]]. X = [ ] Y = dead(z) Tail = [[2, [b,c]], [ ], Z, [2, [b,c]]]?- PROGRAMAÇÃO LÓGICA COM PROLOG 101 A Variável Anónima Suponhamos que estamos interessados no 2.º e no 4.º elementos de uma lista?- [X1,X2,X3,X4 Tail] = [mia, vincent, marsellus, jody, yolanda]. X1 = mia X2 = vincent X3 = marsellus X4 = jody Tail = [yolanda]?- PROGRAMAÇÃO LÓGICA COM PROLOG 102
52 A Variável Anónima Há uma maneira mais simples de obter apenas a informação desejada:?- [ _,X2, _,X4 _ ] = [mia, vincent, marsellus, jody, yolanda]. X2 = vincent X4 = jody?- O underscore é a variável anónima PROGRAMAÇÃO LÓGICA COM PROLOG 103 A Variável Anónima Utilizada quando é necessário recorrer a uma variável, não interessando aquilo que o Sistema Prolog lhe instancia Cada ocorrência da variável anónima é independente, i.e. pode ser sujeita a algo diferente PROGRAMAÇÃO LÓGICA COM PROLOG 104
53 Elemento de uma Lista Uma das coisas mais comum que podemos querer saber sobre uma lista é verificar se algo é ou não um seu elemento Assim, consideremos um predicado que, dados um termo X e uma lista L, nos indica se X pertence ou não a L Este predicado costuma designar-se por member/2 PROGRAMAÇÃO LÓGICA COM PROLOG 105 member/2 member(x,[x T]). member(x,[h T]):- member(x,t).?- PROGRAMAÇÃO LÓGICA COM PROLOG 106
54 member/2 member(x,[x T]). member(x,[h T]):- member(x,t).?- member(yolanda,[yolanda,trudy,vincent,jules]). PROGRAMAÇÃO LÓGICA COM PROLOG 107 member/2 member(x,[x T]). member(x,[h T]):- member(x,t).?- member(yolanda,[yolanda,trudy,vincent,jules]).?- PROGRAMAÇÃO LÓGICA COM PROLOG 108
55 member/2 member(x,[x T]). member(x,[h T]):- member(x,t).?- member(vincent,[yolanda,trudy,vincent,jules]). PROGRAMAÇÃO LÓGICA COM PROLOG 109 member/2 member(x,[x T]). member(x,[h T]):- member(x,t).?- member(vincent,[yolanda,trudy,vincent,jules]).?- PROGRAMAÇÃO LÓGICA COM PROLOG 110
56 member/2 member(x,[x T]). member(x,[h T]):- member(x,t).?- member(zed,[yolanda,trudy,vincent,jules]). PROGRAMAÇÃO LÓGICA COM PROLOG 111 member/2 member(x,[x T]). member(x,[h T]):- member(x,t).?- member(zed,[yolanda,trudy,vincent,jules]). no?- PROGRAMAÇÃO LÓGICA COM PROLOG 112
57 member/2 member(x,[x T]). member(x,[h T]):- member(x,t).?- member(x,[yolanda,trudy,vincent,jules]). PROGRAMAÇÃO LÓGICA COM PROLOG 113 member/2 member(x,[x T]). member(x,[h T]):- member(x,t).?- member(x,[yolanda,trudy,vincent,jules]). X = yolanda; X = trudy; X = vincent; X = jules; no PROGRAMAÇÃO LÓGICA COM PROLOG 114
58 member/2 member(x,[x T]). member(x,[h T]):- member(x,t).?- member(x,[ ]). no PROGRAMAÇÃO LÓGICA COM PROLOG 115 member/2 (outra definição) member(x,[x _]). member(x,[_ T]):- member(x,t). PROGRAMAÇÃO LÓGICA COM PROLOG 116
59 Recursividade no tratamento de Listas O predicado member/2 foi definido utilizando recursividade é realizada determinada operação à cabeça da lista e, depois, é realizada, de forma recursiva, a mesma operação à cauda Esta técnica é muito comum em Prolog, pelo que será importante dominá-la Vejamos outro exemplo PROGRAMAÇÃO LÓGICA COM PROLOG 117 Exemplo: a2b/2 O predicado a2b/2 recebe duas listas como argumentos e terá sucesso: se o 1.º argumento for uma lista de a s e, se o 2.º argumento for uma lista de b s com a mesma dimensão da 1.ª lista?- a2b([a,a,a,a],[b,b,b,b]).?- a2b([a,a,a,a],[b,b,b]). no?- a2b([a,c,a,a],[b,b,b,t]). no PROGRAMAÇÃO LÓGICA COM PROLOG 118
60 Definição de a2b/2: passo 1 a2b([],[]). Geralmente, a melhor maneira de resolver problemas destes é começar por considerar o caso mais simples Aqui significa: a lista vazia PROGRAMAÇÃO LÓGICA COM PROLOG 119 Definição de a2b/2: passo 2 a2b([],[]). a2b([a L1],[b L2]):- a2b(l1,l2). Agora devemos raciocinar recursivamente! Quando deverá a2b/2 decidir que duas listas não vazias são uma lista de a s e uma lista de b s com a mesma dimensão? PROGRAMAÇÃO LÓGICA COM PROLOG 120
61 Teste de a2b/2 a2b([],[]). a2b([a L1],[b L2]):- a2b(l1,l2).?- a2b([a,a,a],[b,b,b]).?- PROGRAMAÇÃO LÓGICA COM PROLOG 121 Teste de a2b/2 a2b([],[]). a2b([a L1],[b L2]):- a2b(l1,l2).?- a2b([a,a,a,a],[b,b,b]). no?- PROGRAMAÇÃO LÓGICA COM PROLOG 122
62 Teste de a2b/2 a2b([],[]). a2b([a L1],[b L2]):- a2b(l1,l2).?- a2b([a,t,a,a],[b,b,b,c]). no?- PROGRAMAÇÃO LÓGICA COM PROLOG 123 Outros testes de a2b/2 a2b([],[]). a2b([a L1],[b L2]):- a2b(l1,l2).?- a2b([a,a,a,a,a], X). X = [b,b,b,b,b]?- PROGRAMAÇÃO LÓGICA COM PROLOG 124
63 Outros testes de a2b/2 a2b([],[]). a2b([a L1],[b L2]):- a2b(l1,l2).?- a2b(x,[b,b,b,b,b,b,b]). X = [a,a,a,a,a,a,a]?- PROGRAMAÇÃO LÓGICA COM PROLOG 125 Aritmética em Prolog O Prolog fornece um conjunto de operações aritméticas básicas Números inteiros e números reais Aritmética = 5 3 x 4 = = = -2 4 : 2 = resto da divisão inteira de 7 por quociente da divisão inteira de 7 por 2 Prolog?- 5 is 2+3.?- 12 is 3 4.?- 2 is 5-3.?- -2 is 3-5.?- 2 is 4/2.?- 1 is mod(7,2).?- 3 is 7//2 PROGRAMAÇÃO LÓGICA COM PROLOG 126
64 Aritmética: Exemplos?- 10 is 5+5.?- 4 is 2+3. no?- X is 3 4. X=12?- R is mod(7,2). R=1 PROGRAMAÇÃO LÓGICA COM PROLOG 127 Aritmética: Definição de predicados addthreeanddouble(x, Y):- Y is (X+3) 2. PROGRAMAÇÃO LÓGICA COM PROLOG 128
65 Aritmética: Definição de predicados addthreeanddouble(x, Y):- Y is (X+3) 2.?- addthreeanddouble(1,x). X=8?- addthreeanddouble(2,x). X=10 PROGRAMAÇÃO LÓGICA COM PROLOG 129 Operadores Aritméticos Importante: os operadores +, -, / e não calculam qualquer resultado aritmético em Prolog Expressões como 3+2, 4-7, 5/5 são apenas termos Prolog Functor: +, -, /, Aridade: 2 Argumentos: inteiros PROGRAMAÇÃO LÓGICA COM PROLOG 130
66 Operadores Aritméticos?- X = PROGRAMAÇÃO LÓGICA COM PROLOG 131 Operadores Aritméticos?- X = X = 3+2?- PROGRAMAÇÃO LÓGICA COM PROLOG 132
67 Operadores Aritméticos?- X = X = 3+2? = X. PROGRAMAÇÃO LÓGICA COM PROLOG 133 Operadores Aritméticos?- X = X = 3+2? = X. X = 3+2?- PROGRAMAÇÃO LÓGICA COM PROLOG 134
68 O Predicado is/2 Para forçar o Sistema Prolog a efetuar o cálculo de expressões aritméticas, temos de usar o predicado is tal como vimos em exemplos anteriores Representa uma indicação para o Sistema Prolog efetuar cálculos Uma vez que não é um predicado Prolog comum, é necessário ter em conta algumas restrições PROGRAMAÇÃO LÓGICA COM PROLOG 135 O Predicado is/2?- X is PROGRAMAÇÃO LÓGICA COM PROLOG 136
69 O Predicado is/2?- X is X = 5?- PROGRAMAÇÃO LÓGICA COM PROLOG 137 O Predicado is/2?- X is X = 5? is X. PROGRAMAÇÃO LÓGICA COM PROLOG 138
70 O Predicado is/2?- X is X = 5? is X. ERROR: is/2: Arguments are not sufficiently instantiated?- PROGRAMAÇÃO LÓGICA COM PROLOG 139 O Predicado is/2?- X is X = 5? is X. ERROR: is/2: Arguments are not sufficiently instantiated?- Result is PROGRAMAÇÃO LÓGICA COM PROLOG 140
71 O Predicado is/2?- X is X = 5? is X. ERROR: is/2: Arguments are not sufficiently instantiated?- Result is Result = 10?- PROGRAMAÇÃO LÓGICA COM PROLOG 141 Restrições na utilização de is/2 Podem ser utilizadas variáveis no lado direito do predicado is Mas quando o Sistema Prolog efetua a avaliação, as variáveis já devem ter sido instanciadas por um termo Prolog sem variáveis Esse termo Prolog deve ser uma expressão aritmética PROGRAMAÇÃO LÓGICA COM PROLOG 142
72 Notação Duas notas finais sobre expressões aritméticas 3+2, 4/2, 4-5 são apenas termos Prolog numa notação mais amigável do utilizador: 3+2 é, na realidade, +(3,2) O predicado is também é um predicado Prolog de aridade 2 PROGRAMAÇÃO LÓGICA COM PROLOG 143 Notação Duas notas finais sobre expressões aritméticas 3+2, 4/2, 4-5 são apenas termos Prolog numa notação mais amigável do utilizador: 3+2 é, na realidade, +(3,2) O predicado is também é um predicado Prolog de aridade 2?- is(x,+(3,2)). X = 5 PROGRAMAÇÃO LÓGICA COM PROLOG 144
73 Listas e Aritmética Qual o tamanho de uma lista? A lista vazia tem dimensão: zero; Uma lista não-vazia tem dimensão: um mais dimensão da sua cauda. PROGRAMAÇÃO LÓGICA COM PROLOG 145 Dimensão de uma Lista length([],0). length([_ L],N):- length(l,x), N is X + 1.?- PROGRAMAÇÃO LÓGICA COM PROLOG 146
74 Dimensão de uma Lista length([],0). length([_ L],N):- length(l,x), N is X + 1.?- length([a,b,c,d,e,[a,x],t],x). PROGRAMAÇÃO LÓGICA COM PROLOG 147 Dimensão de uma Lista length([],0). length([_ L],N):- length(l,x), N is X + 1.?- length([a,b,c,d,e,[a,x],t],x). X=7?- PROGRAMAÇÃO LÓGICA COM PROLOG 148
75 Inverter uma Lista em Prolog?- reverse([a,b,c,d],l). L=[d,c,b,a]?- reverse(l,[a,b,c,d]). L=[d,c,b,a]?- PROGRAMAÇÃO LÓGICA COM PROLOG 149 Acrescentar elementos a uma Lista append([], L, L). append([h L1], L2, [H L3]):- append(l1, L2, L3).?- append([1,2,3,4],[5,6,7,8,9],l). L=[1,2,3,4,5,6,7,8,9]?- append([],[a,b,c,d],l). L=[a,b,c,d]?- PROGRAMAÇÃO LÓGICA COM PROLOG 150
76 Operadores Relacionais Alguns predicados Prolog efetuam eles próprios cálculos aritméticos São exemplo os operadores relacionais PROGRAMAÇÃO LÓGICA COM PROLOG 151 Operadores Relacionais Aritmética Prolog x < y X < Y x y X =< Y x = y x y x y x > y X =:= Y X =\= Y X >= Y X > Y PROGRAMAÇÃO LÓGICA COM PROLOG 152
77 Operadores Relacionais Têm o significado óbvio Forçam a avaliação dos dois argumentos (da direita e da esquerda)?- 2 < 4+1.?- 4+3 > 5+5. no PROGRAMAÇÃO LÓGICA COM PROLOG 153 Operadores Relacionais Têm o significado óbvio Forçam a avaliação dos dois argumentos (da direita e da esquerda)?- 4 = 4.?- 2+2 = 4. no?- 2+2 =:= 4. PROGRAMAÇÃO LÓGICA COM PROLOG 154
78 Operadores de Igualdade: Resumo Há 3 tipos de operadores para testar igualdade = \= == \== =:= =\= Predicado de Unificação Predicado de identidade com unificação Negação do predicado de unificação Predicado de Identidade Predicado de identidade sem unificação Negação do predicado de identidade Predicado de Igualdade Aritmética Negação da Igualdade Aritmética PROGRAMAÇÃO LÓGICA COM PROLOG 155 Operadores de Igualdade: Resumo Igualdade aritmética (=:=)?- 6+4 =:= 6*3-8.?- 10 =\= 8+3.?- PROGRAMAÇÃO LÓGICA COM PROLOG 156
79 Operadores de Igualdade: Resumo Igualdade de termos (==)?- 6+4 \== 3+7.?- likes(x,prolog) == likes(y,prolog). no?- PROGRAMAÇÃO LÓGICA COM PROLOG 157 Operadores de Igualdade: Resumo Igualdade de termos com unificação (=)?- 6+X = 6+3. X=3?- likes(x,prolog) \= likes(john,y). no?- PROGRAMAÇÃO LÓGICA COM PROLOG 158
80 Operadores Lógicos not O operador de negação cao(milord).?- not cao(milord). no ; O operador de disjunção?- 6<3; 7 is 5+2. PROGRAMAÇÃO LÓGICA COM PROLOG 159 Entrada e Saída (IO) write/1 escrita de termos no dispositivo de saída nl/0 escrita de linha em branco (new line)?- write(26),nl. 26?- PROGRAMAÇÃO LÓGICA COM PROLOG 160
81 Entrada e Saída (IO) read/1 leitura (entrada) de termos?- read(x). : jim. X=jim?- PROGRAMAÇÃO LÓGICA COM PROLOG 161 Entrada e Saída (IO) put/1 escrita de um caracter no dispositivo de saída (valor ASCII: 0 255)?- put(97),nl. a?- PROGRAMAÇÃO LÓGICA COM PROLOG 162
82 Entrada e Saída (IO) get0/1 leitura de um único caracter?- get0(n). : a N = 97?- PROGRAMAÇÃO LÓGICA COM PROLOG 163 Entrada e Saída (IO) get/1 leitura do primeiro caracter não-branco (non-white-space)?- get(x). : Z X = 90?- get(m). : Z M = 90 PROGRAMAÇÃO LÓGICA COM PROLOG 164
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 (_).
Figura: Capa do Livro Hamburger, H., Richards, D. Logic and Language Models for Computer Science, Prentice Hall. Universidade Federal de Campina Grande Departamento de Sistemas e Computação Curso de Bacharelado
Unificação PROGRAMAÇÃO EM LÓGICA. Unificação. Unificação. Unificação. Unificação. Linguagem Prolog Parte III
PROGRAMAÇÃO EM LÓGICA CIÊNCIA DA COMPUTAÇÃO FACAPE Faculdade de Ciências Aplicadas e Sociais de Petrolina Linguagem Prolog Parte III Prof. Sergio Ribeiro Adaptado do material da Profª Elaine Ribeiro Universidade
Fundamentos. Paradigma de Programação Lógico. Marco A L Barbosa
Fundamentos Paradigma de Programação Lógico Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. Conteúdo Visão mais detalhada
A linguagem Prolog. Sintaxe, terminologia e semântica informal: Os objectos de dados em Prolog são chamados termos.
A linguagem Prolog Sintaxe, terminologia e semântica informal: Os objectos de dados em Prolog são chamados termos. Um termo ou é uma constante, ou uma variável ou um termo composto. As constantes incluem
Linguagens Lógicas. Aluno: Victor Rocha
Linguagens Lógicas Aluno: Victor Rocha Roteiro Introdução Cálculo de Predicados Proposições Conectores Lógicos Variáveis Tipos de Cláusulas fatos regras Banco de Dados Prolog Fatos em Prolog Questões Unificação
Introdução à Programação em Prolog
Introdução à Programação em Prolog Thiago A. S. Pardo Solange Rezende Exercício em duplas Introdução (1 de 4) Escrever um programa completo em C que armazene quem gosta de quem e que responda sim ou não
Sintaxe e Semântica de Programas Prolog
Sintaxe e Semântica de Programas Prolog Thiago A. S. Pardo Solange Rezende Inteligência Artificial 1 Objetos em Prolog Objetos (Termos) Objetos Simples Estruturas Constantes (Atômicos) Variáveis Átomos
Listas em Prolog. Listas
Listas em Prolog Esta aula trata da estrutura de dados lista e programas Prolog para processamento de listas Inteligência Artificial 1 Listas Lista é uma das estruturas mais simples em Prolog, muito comum
Prolog. MATA56 - Paradigmas de Linguagens de Programação, UFBA, Prof. Rodrigo Rocha Prolog. Iniciando.
Prolog MATA56 - Paradigmas de Linguagens de Programação, UFBA, 2016.1. Prof. Rodrigo Rocha (rodrigo@dcc.ufba.br) Baseada na lógica de primeira ordem (lógica de predicados) Concebida na década de 1970
03/04/2016 LÓGICA MATEMÁTICA. Prof. Esp. Fabiano Taguchi. Introdução ao Prolog
LÓGICA MATEMÁTICA Prof. Esp. Fabiano Taguchi fabianotaguchi@gmail.com http://fabianotaguchi.wordpress.com Introdução ao Prolog 1 PROLOG PROgramming in LOGic Linguagem utilizada para resolver problemas
Linguagens Lógicas. Alunos: Josiane Novais Cláudio Moisés
Linguagens Lógicas Alunos: Josiane Novais Cláudio Moisés Declarativos em vez de baseados em procedimentos Sintaxe diferente das linguagens imperativas e funcionais. Semântica é pouco semelhante a linguagem
Prof. A. G. Silva. 24 de agosto de Prof. A. G. Silva Programação em Lógica 24 de agosto de / 1
Programação em Lógica Prof. A. G. Silva 24 de agosto de 2017 Prof. A. G. Silva Programação em Lógica 24 de agosto de 2017 1 / 1 Termos Referem-se a todas as construções sintáticas da linguagem Um termo
Capítulo 3 Lógica de Primeira Ordem
Capítulo 3 Lógica de Primeira Ordem Lógica para Programação LEIC - Tagus Park 1 o Semestre, Ano Lectivo 2007/08 c Inês Lynce and Luísa Coheur Bibliografia Baseados nos slides de Andrew Rice, Universidade
Inteligência Artificial Apontamentos para as aulas Luís Miguel Botelho
Inteligência Artificial Apontamentos para as aulas Luís Miguel Botelho Departamento de Ciências e Tecnologias da Informação ISCTE-IUL - Instituto Universitário de Lisboa Dezembro de 2016 1 Notas sobre
Objetivo PROGRAMAÇÃO EM LÓGICA. Conteúdo. Referências Bibliográficas. Introdução. Introdução. Linguagem Prolog Parte I
PROGRAMAÇÃO EM LÓGICA Objetivo CIÊNCIA DA COMPUTAÇÃO FACAPE Faculdade de Ciências Aplicadas e Sociais de Petrolina Linguagem Prolog Parte I Prof. Sergio Ribeiro Adaptado do material de: Profª Elaine Ribeiro
SCC Capítulo 5 Representação de Conhecimento através do Prolog
SCC-630 - Capítulo 5 Representação de Conhecimento através do Prolog João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São
Aula 2 Programação Lógica Sintaxe Prolog. Profa. Elaine Faria UFU -2014
Aula 2 Programação Lógica Sintaxe Prolog Profa. Elaine Faria UFU -2014 Créditos O material a seguir consiste de adaptações e extensões dos originais gentilmente cedidos pelo Prof. Alexsandro Santos Soares
Conferencia 6 Estruturas, pregados para o trabalho com estruturas, seletores. MSc. Angel Alberto Vazquez Sánchez
Conferencia 6 Estruturas, pregados para o trabalho com estruturas, seletores MSc. Angel Alberto Vazquez Sánchez Objetivo Caracterizar as estruturas como elemento importante da programação no Prolog. 2/41
Introdução à linguagem Prolog
Introdução à linguagem Prolog Lógica Computacional 2 o ano LCC 2011/2012 1 Preâmbulo Ao longo do semestre iremos na disciplina de Lógica Computacional fazer uso da linguagem Prolog. O interpretador adoptado
Elisabete Raposo Freire Departamento de Matemática Universidade dos Açores 21 Abril 2012
Elisabete Raposo Freire Departamento de Matemática Universidade dos Açores 21 Abril 2012 Problema de Einstein (adaptado) Existem 5 casas de 5 cores diferentes. Em cada casa vive uma pessoa de nacionalidade
Programação lógica: operadores, repe ções e listas
Programação lógica: operadores, repe ções e listas Profs. Diogo S. Mar ns e Emilio Francesquini {santana.mar ns,e.francesquini}@ufabc.edu.br MCTA016 - Paradigmas de Programação (Prá ca) 14 de agosto de
Paradigmas de Linguagens de Programação. Linguagens de Programação Lógicas
Linguagens de Programação Lógicas Cristiano Lehrer Introdução Uma metodologia de programação diferente. Expressar programas na forma de lógica simbólica e a utilização de inferência lógica para produzir
Recursão PROGRAMAÇÃO EM LÓGICA. Recursão. Sonho Recursivo. Recursão. Recursão. Linguagem Prolog Parte IV
PROGRAMAÇÃO EM LÓGICA Recursão CIÊNCIA DA COMPUTAÇÃO FACAPE Faculdade de Ciências Aplicadas e Sociais de Petrolina Linguagem Prolog Parte IV Usado desde a arte (em figuras, telas, etc) como também em Matemática
CENTRO UNIVERSITÁRIO LUTERANO DE PALMAS PROLOG. Elias Melgaço Chaves Júnior Jonatas Luiz da Costa Rafael Gonçalves Barreira
CENTRO UNIVERSITÁRIO LUTERANO DE PALMAS PROLOG Elias Melgaço Chaves Júnior Jonatas Luiz da Costa Rafael Gonçalves Barreira Roteiro Linguagens de Programação em Lógica: histórico THIS IS PROLOG!!!! SWI-Prolog
Programação Lógica. A Linguagem Prolog. Paulo Henrique Ribeiro Gabriel Faculdade de Computação Universidade Federal de Uberlândia
Programação Lógica A Linguagem Prolog Paulo Henrique Ribeiro Gabriel phrg@ufu.br Faculdade de Computação Universidade Federal de Uberlândia 21 de agosto de 2015 Paulo H. R. Gabriel (FACOM/UFU) Programação
BUSCA DE SOLUÇÕES EM PROLOG
PR UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ BUSCA DE SOLUÇÕES EM PROLOG Resolução em PROLOG: Unificação e substituição 1 UNIFICAÇÃO EM PROLOG HISTÓRICO 2 HISTÓRIA A PARTIR DE 1950 1958 forma clausal:
parent parent corpo, corpo 1 2 Prolog - João C. P. da Silva
Prolog é uma linguagem de programação utilizada para resolução de problemas que envolvem objetos e relações entre objetos. s José possui um livro. O carro é vermelho. Duas pessoas são irmãs se ambas são
INF 1771 Inteligência Artificial
INF 1771 Inteligência Artificial Aula 09 Prolog Edirlei Soares de Lima Variáveis Variáveis são representadas através de cadeias de letras, números ou _ sempre começando com letra
Prof. A. G. Silva. 31 de agosto de Prof. A. G. Silva Programação em Lógica 31 de agosto de / 1
Programação em Lógica Prof. A. G. Silva 31 de agosto de 2017 Prof. A. G. Silva Programação em Lógica 31 de agosto de 2017 1 / 1 Listas (revisão) Elementos separados por vírgulas entre colchetes: [a, b,
Programação Orientada a Objetos. Programação Lógica
Programação Orientada a Objetos Programação Lógica Cristiano Lehrer, M.Sc. Introdução Uma metodologia de programação diferente. Expressar programas na forma de lógica simbólica e a utilização de inferência
Inteligência Artificial. Prolog. Aula 2 Introdução (cont.)
Universidade Estadual do Oeste do Paraná Curso de Bacharelado em Ciência da Computação http://www.inf.unioeste.br/~claudia/ia2017.html Inteligência Artificial Prolog Aula 2 Introdução (cont.) Características
A linguagem algorítmica utiliza o português para a definição dos comandos e tem as seguintes característica:
1 de 16 08/02/2012 14:08 Linguagem Linguagem Algorítmica A linguagem algorítmica utiliza o português para a definição dos comandos e tem as seguintes característica: 1 - A linguagem não á sensível á capitulação
Paradigma de Programação Lógico. Marco A L Barbosa
Introdução Paradigma de Programação Lógico Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. Conteúdo Introdução Imperativo
Programação Lógica. Controle (Bactracking, Cut, Fail) Paulo Henrique Ribeiro Gabriel
Programação Lógica Controle (Bactracking, Cut, Fail) Paulo Henrique Ribeiro Gabriel phrg@ufu.br Faculdade de Computação Universidade Federal de Uberlândia 7 de outubro de 2015 Paulo H. R. Gabriel (FACOM/UFU)
Aula 4 Expressões e Operadores Cleverton Hentz
Aula 4 Expressões e Operadores Cleverton Hentz Sumário de Aula } Expressões } Operadores } Linearização de Expressões 2 Expressões Uma expressão é composta por variáveis, constantes, ou qualquer combinação
Listas. Em PROLOG os elementos das listas não têm de ser do mesmo tipo (por exemplo, [a,2,abc,[x,1,zzz]])
Listas Em PROLOG as listas podem ser: Não vazias, tendo uma cabeça (1º elemento da lista) e uma cauda (lista com os restantes elementos) Vazias, quando não têm nenhum elemento (equivalente ao NULL ou NIL
Capítulo 3 Lógica de Primeira Ordem
Capítulo 3 Lógica de Primeira Ordem Lógica para Programação LEIC - Tagus Park 1 o Semestre, Ano Lectivo 2007/08 c Inês Lynce and Luísa Coheur Bibliografia Martins J.P., Lógica para Programação, Capítulo
Programação Lógica. (Capítulo 11) LÓGICA APLICADA A COMPUTAÇÃO. Professor: Rosalvo Ferreira de Oliveira Neto
Programação Lógica (Capítulo 11) LÓGICA APLICADA A COMPUTAÇÃO Professor: Rosalvo Ferreira de Oliveira Neto Estrutura 1. Programação Lógica 2. Prolog 3. Exemplos Sintaxe da Programação Lógica Definição
Sintaxe e Semântica de Programas Prolog
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
Introdução à Ciência da Computação
Créditos Introdução à Ciência da Computação Tópicos Preliminares em Programação Exceto por adaptações e complementos menores, o material a seguir é composto de slides gentilmente cedidos por: Prof. Rudinei
Eugénio Oliveira Outros docentes da cadeira:
eco@fe.up.pt www.fe.up.pt/~eco.html Outros docentes da cadeira: Daniel Moura- T e P dcm@fe.up.pt Rui Gomes- P rjgomes@fe.up.pt 1 Objectivos Adquirir familiaridade com os paradigmas da, Programação com
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PROLOG PROF. CESAR A. TACLA UTFPR/CURITIBA
PR UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PROLOG 1 PROLOG: UTILIZAÇÃO A principal utilização da linguagem Prolog reside no domínio da programação simbólica, não-numérica, sendo especialmente adequada
Programação em Lógica. UCPEL/CPOLI/BCC Lógica para Ciência da Computação Luiz A M Palazzo Maio de 2010
Programação em Lógica UCPEL/CPOLI/BCC Lógica para Ciência da Computação Luiz A M Palazzo Maio de 2010 Roteiro Introdução Conceitos Básicos Linguagens Lógicas Semântica de Modelos Semântica de Prova Programação
1 Lógica de primeira ordem
1 Lógica de primeira ordem 1.1 Sintaxe Para definir uma linguagem de primeira ordem é necessário dispor de um alfabeto. Este alfabeto introduz os símbolos à custa dos quais são construídos os termos e
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
Departamento de Ciência de Computadores FCUP Desenho e Análise de Algoritmos CC2001 2017/2018 Folha 1 - Revisão: Escrita de algoritmos em pseudo-código e verificação de correção Descrição da linguagem
Universidade de Aveiro
Universidade de Aveiro 1998/99 Disciplina Introdução à Programação em Lógica (IPL) Curso MAC 1 ō Semestre 2 ō Semestre Anual Docente Delfim Fernando Marado Torres 1107 03.03.99 Apresentação: Enquadramento
Noções de algoritmos - Aula 1
Noções de algoritmos - Aula 1 Departamento de Física UFPel Definição de algoritmo Sequência ordenada e finita de operações para a realização de uma tarefa. Tarefa: Experimento de Física I. Passo 1: Reunir
INF 1771 Inteligência Artificial
Edirlei Soares de Lima INF 1771 Inteligência Artificial Aula 09 Prolog Variáveis Variáveis são representadas através de cadeias de letras, números ou _ sempre começando com letra
Programação de Computadores I Dados, Operadores e Expressões PROFESSORA CINTIA CAETANO
Programação de Computadores I Dados, Operadores e Expressões PROFESSORA CINTIA CAETANO Dados em Algoritmos Quando escrevemos nossos programas, trabalhamos com: Dados que nós fornecemos ao programa Dados
UNIDADE ACADÊMICA: Faculdade de
UNIVERSIDADE FEDERAL DE UBERLÂNDIA FACULDADE DE COMPUTAÇÃO BACHARELADO EM SISTEMAS DE INFORMAÇÃO PLANO DE DISCIPLINA DISCIPLINA: Programação Lógica ( X ) SEMESTRAL - ( ) ANUAL CÓDIGO: GSI010 PERÍODO: 2
Listas em Haskell. Listas. Linguagem Haskell. Maria Adriana Vidigal de Lima. Faculdade de Computação - UFU. Setembro
em Haskell Linguagem Haskell Faculdade de Computação - UFU Setembro - 2009 em Haskell 1 em Haskell Noções sobre Construção de por Compreensão Funções Sobre Processamento de Fundamentos em Haskell Noções
Pedro Vasconcelos DCC/FCUP. Programação Funcional 3 a Aula Definição de funções
Programação Funcional 3 a Aula Definição de funções Pedro Vasconcelos DCC/FCUP 2014 Definição de funções Podemos definir novas funções simples usando funções pré-definidas. minuscula :: Char -> Bool minuscula
Introdução à Programação em C Input / Output
Introdução à Programação em C Input / Output Resumo Aula Anterior Programa começa com função main() Sintaxe para definição de funções Definição de variáveis e atribuições Estruturas de controlo if-then
Inteligência Artificial 2016/2017. Grupo 1 Perguntas obrigatórias (15 Minutos)
EI (diurno e PL) ETI (diurno e PL) IGE (diurno e PL) Inteligência Artificial 2016/2017 Teste Tipo de Sistemas Baseados em Conhecimento Lê cuidadosamente as instruções desta prova feita em moldes não habituais.
Tópicos de Matemática. Teoria elementar de conjuntos
Tópicos de Matemática Lic. em Ciências da Computação Teoria elementar de conjuntos Carla Mendes Dep. Matemática e Aplicações Universidade do Minho 2010/2011 Tóp. de Matemática - LCC - 2010/2011 Dep. Matemática
AMBIENTE DE PROGRAMAÇÃO PYTHON II
Computadores e Programação Engª Biomédica Departamento de Física Faculdade de Ciências e Tecnologia da Universidade de Coimbra Ano Lectivo 2003/2004 FICHA 2 AMBIENTE DE PROGRAMAÇÃO PYTHON II 2.1. Objectivos
Linguagens Formais e Problemas de Decisão
Linguagens Formais e Problemas de Decisão Mário S. Alvim (msalvim@dcc.ufmg.br) Fundamentos de Teoria da Computação (FTC) DCC-UFMG (2018/02) Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Formais e Problemas
Linguagens de Programação Aula 15
Linguagens de Programação Aula 15 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada Linguagem Haskell 2 Na aula de hoje Paradigma Lógico Linguagem Prolog (PROgrammation en LOGique) 3 Introdução
Entrada e Saída. Prof. Elaine Faria e Hiran Nonato Programação Lógica UFU 2012
Entrada e Saída Prof. Elaine Faria e Hiran Nonato Programação Lógica UFU 2012 Créditos O material a seguir consiste de adaptações e extensões dos originais gentilmente cedidos pelo Prof. Alexsandro Santos
Programação em lógica - tem suas raízes no cálculo de predicados, proposto por Frege em 1879.
Figura: Capa do Livro Hamburger, H., Richards, D. Logic and Language Models for Computer Science, Prentice Hall. Universidade Federal de Campina Grande Departamento de Sistemas e Computação Curso de Bacharelado
6. OPERADORES E ARITMÉTICA
6. OPERADORES E ARITMÉTICA 6.1 OPERADORES Na matemática costuma-se escrever expressões como 2*a + b*c onde + e * são operadores e 2, a, b e c são argumentos. Em particular, + e * são denominados operadores
Prof. Marcos A. Schreiner. 15 de junho de Prof. Marcos A. Schreiner (UFPR) 15 de junho de / 18
Prolog - Programação Lógica Prof. Marcos A. Schreiner Disciplina de Introdução à Lógica 15 de junho de 2015 Prof. Marcos A. Schreiner (UFPR) 15 de junho de 2015 1 / 18 1 Introdução 2 Prolog Definições
PROGRAMAÇÃO EM LÓGICA
PROGRAMAÇÃO EM LÓGICA CIÊNCIA DA COMPUTAÇÃO FACAPE Faculdade de Ciências Aplicadas e Sociais de Petrolina Linguagem Prolog Parte II Prof. Sergio Ribeiro Adaptado do material de: Prof José Augusto Universidade
Resolução Exe 2.12 Monolítico Recursivo
Resolução Exe 2.12 Monolítico Recursivo Recursivo P R é R 1 onde R 1 def (se T1 então R 2 senão R 3 ) R 2 def F; R 3 R 3 def (se T2 então R 4 senão R 7 ) R 4 def G; R 5 R 5 def (se T1 então R 7 senão R
Manipulação de informação. Algoritmos computacionais
Manipulação de informação Algoritmos computacionais Sumário Algoritmos não computacionais Algoritmos computacionais Bases de Numeração Números binários Programas em linguagem máquina Linguagem estruturada
Vamos agora abordar um conjunto de aspectos complementares, incluindo:
Alguns aspectos complementares da linguagem PROLOG Vamos agora abordar um conjunto de aspectos complementares, incluindo: A conversão de strings em listas de códigos A carga de programas e Bases de Conhecimento
Programação Lógica. Programação Lógica PROLOG
Programação Lógica PROLOG A programação em lógica se desenvolveu no início dos anos 70 a partir de alguns trabalhos sobre prova de teoremas. Desde então ela tem demonstrado ser um formalismo simples, mas
Inteligência Artificial Apontamentos para as aulas. Luís Miguel Botelho
Inteligência Artificial Apontamentos para as aulas Luís Miguel Botelho Departamento de Ciências e Tecnologias da Informação ISCTE-IUL - Instituto Universitário de Lisboa Dezembro de 2016 1 Notas sobre
2. Linguagem de Programação Prolog
Inteligência Artificial - IBM1024 2. Linguagem de Programação Prolog Prof. Renato Tinós Local: Depto. de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 2. Linguagem de Programação Prolog 2.1.
Introdução. Introdução. Motivação. Motivação. Solução INTELIGÊNCIA ARTIFICIAL CÁLCULO RELACIONAL (PARTE I)
Introdução 2 INTELIGÊNCIA ARTIFICIAL CÁLCULO RELACIONAL (PARTE I) O Cálculo Relacional (CR) é uma extensão do Cálculo Proposicional que possui maior capacidade de representação de conhecimento O CR é também
Lógica e Programação - Folha de trabalho n. 7
Os exercícios 1, 2, 5, 6, 7, 8 e 12 são de Alguns Problemas de Prolog, Miguel Filgueiras, Pedro Ribeiro DCC-FCUP 2004-2006. Todos os exercícios são para ser resolvidos em linguagem Prolog. 1 Listas 1 Define
Sistemas Inteligentes
Sistemas Inteligentes Aula 22/10 Lógica de Primeira Ordem e PROLOG Agente Baseado em Conhecimento O componente central de um agente baseado em conhecimento é sua base de conhecimento. A base de conhecimento
Lógica para Computação
Lógica para Computação Prof. Celso Antônio Alves Kaestner, Dr. Eng. celsokaestner (at) utfpr (dot) edu (dot) br Resolução e PROLOG Passos para obter a forma clausal de uma fbf: 1. Obter a forma normal
Alguns Exercícios de Inteligência Artificial
Alguns Exercícios de Inteligência Artificial Ana Paula Tomás Nelma Moreira Departamento de Ciência de Computadores Faculdade de Ciências, Universidade do Porto email: {apt,nam}@ncc.up.pt 1997 1. Números
Curso Profissional de Gestão e Programação de Sistemas Informáticos. Programação e Sistemas de Informação. Módulo 1. 3ª Parte Prof. Sandra Pais Soares
Curso Profissional de Gestão e Programação de Sistemas Informáticos Programação e Sistemas de Informação Módulo 1 3ª Parte Prof. Sandra Pais Soares Fundamentos de Programação 1. Palavras Reservadas 2.
Descrição do Mundo de Wumpus. Inteligência Artificial
Descrição do Mundo de Wumpus Mundo de Wumpus Mundo de Wumpus -1 Mundo de Wumpus - 2 Mundo de Wumpus - 3 Mundo de Wumpus - 4 Wumpus Outros Pontos Críticos Descrição Lógica do Mundo de Wumpus Identidades
Lógica de primeira ordem (Capítulo 8 - Russell) Inteligência Artificial
Lógica de primeira ordem (Capítulo 8 - Russell) Inteligência Artificial Estrutura 1- Contextualização 2- Definições 3- Lista de exercício 4- Prolog 5- Regras em Prolog - Mundo Wumpus 6- Aplicação do Mundo
Inteligência Artificial 2016/2017. Grupo 1 Perguntas Obrigatórias (15 Minutos)
EI (diurno e PL) ETI (diurno e PL) IGE (diurno e PL) Inteligência Artificial 2016/2017 Teste Tipo de Prolog Lê cuidadosamente as instruções desta prova feita em moldes não habituais. Para passar é forçoso
5. Expressões aritméticas
5. Expressões aritméticas 5.1. Conceito de Expressão O conceito de expressão em termos computacionais está intimamente ligado ao conceito de expressão (ou fórmula) matemática, onde um conjunto de variáveis
I - CONCEITOS INICIAIS
Sumário I - CONCEITOS INICIAIS... 2 Lógica de programação... 2 Algoritmo... 2 Instrução... 3 Programa de Computador... 3 Fases... 4 Diagrama de Blocos... 4 II - VARIÁVEIS... 5 Numéricas... 5 Cadeia ou
Métodos de Programação I Ana Maria de Almeida
Métodos de Programação I 2. 13 type naipe = ( ouros, copas, paus, espadas ); var trunfo : naipe; Claro que são apenas identificadores e não existirá a mesma escolha de operadores e funções sobre eles que
Aplicações de Lógica. Lógica como Linguagem de Programação. Mario Benevides UFRJ
Aplicações de Lógica Lógica como Linguagem de Programação Mario Benevides UFRJ Listas Lista L=[a,b,c,d,e,f] onde a,b,...,f são elementos da lista. o elemento a é chamado de cabeça e a lista restante [b,c,d,e,f]
Lógica Computacional
Lógica Computacional Aplicações da Lógica Verificação de Programas, Bases de Dados, Sistemas inteligentes Programação em Lógica Exemplos 27 Novembro 2013 Lógica Computacional 1 - Base de Conhecimentos:
SEBENTA INTRODUÇÃO Á ALGORITMIA
SEBENTA INTRODUÇÃO Á ALGORITMIA O desenvolvimento de programas para computador está sempre baseado na tarefa de programar um computador para seja resolvido um problema ou executada uma função e assim dar
Lógica para computação - Linguagem da Lógica de Predicados
DAINF - Departamento de Informática Lógica para computação - Linguagem da Lógica de Predicados Prof. Alex Kutzke ( http://alex.kutzke.com.br/courses ) 13 de Outubro de 2015 Razões para uma nova linguagem
Fundamentos de Lógica Matemática
Webconferência 6-29/03/2012 Introdução à Lógica de Predicados Prof. L. M. Levada http://www.dc.ufscar.br/ alexandre Departamento de Computação (DC) Universidade Federal de São Carlos (UFSCar) 2012/1 Introdução
Símbolo Nome lê-se como Categoria = 10 significa que se se somar 4 a 6, a soma, ou resultado, é 10.
Símbolo Nome lê-se como Categoria adição mais aritmética + 4 + 6 = 10 significa que se se somar 4 a 6, a soma, ou resultado, é 10. Exemplo: 43 + 65 = 108; 2 + 7 = 9 subtração menos aritmética - 9-4 = 5
Conferência Tratamento de listas no PROLOG
Inteligência Artificial Conferência Tratamento de listas no PROLOG O Docente: MSc. Angel Alberto Vazquez Sánchez Objetivo Caracterizar as listas no Prolog, fazendo ênfase em sua definição recursiva. Bibliografía
Layout. Módulos. Normalmente, cada módulo está armazenado num ficheiro com o mesmo nome do módulo. Exemplo.hs
Layout Ao contrário de quase todas as linguagens de programação, o Haskell não necessita de marcas para delimitar as diversas declarações que constituem um programa. Em Haskell a identação do texto (isto
Inteligência Artificial IA IV. RACIOCÍNIO BASEADO EM REGRAS
Inteligência Artificial IA Prof. João Luís Garcia Rosa IV. RACIOCÍNIO BASEADO EM REGRAS Parte 2 2004 Um Sistema de Dedução Regressivo Uma propriedade importante da lógica é a dualidade entre asserções
Matemática I. 1 Propriedades dos números reais
Matemática I 1 Propriedades dos números reais O conjunto R dos números reais satisfaz algumas propriedades fundamentais: dados quaisquer x, y R, estão definidos a soma x + y e produto xy e tem-se 1 x +
Programação de Computadores:
Instituto de C Programação de Computadores: Introdução a Algoritmos (Parte II) Luis Martí Instituto de Computação Universidade ederal luminense lmarti@ic.uff.br - http://lmarti.com Roteiro da Aula de Hoje
Lógica Computacional
Lógica Computacional Consequência Tautológica e Lógica em Frases Quantificadas Leis de de Morgan Separação de Quantificadores Consequências Analíticas e Método Axiomático 24 Outubro 2017 Lógica Computacional
Ambiente de desenvolvimento
Linguagem C Ambiente de desenvolvimento Um programa em C passa por seis fases até a execução: 1) Edição 2) Pré-processamento 3) Compilação 4) Linking 5) Carregamento 6) Execução Etapa 1: Criação do programa
Lógica Computacional
Lógica Computacional Consequência Tautológica e Lógica em Frases Quantificadas Leis de de Morgan Separação de Quantificadores Consequências Analíticas e Método Axiomático 3 Novembro 2016 Lógica Computacional
Variável. Expressões. Atribuição. Tipos básicos Declaração. Aritméticas Lógicas. Professor Leandro Augusto Frata Fernandes
Programação de Computadores III Aula 3 Professor Leandro Augusto Frata Fernandes laffernandes@ic.uff.br Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2011.1/tcc-03.063 Roteiro da Aula
Algoritmos. Algoritmos e Linguagem de Programação - Prof Carlos Vetorazzi
Algoritmos Algoritmos e Linguagem de Programação - Prof Carlos Vetorazzi Conceitos Linhas de Código de um Algoritmo ou Programa escrita do programa linha a linha, ou seja, a sintaxe do programa, podendo-se
Métodos para a construção de algoritmo
Métodos para a construção de algoritmo Compreender o problema Identificar os dados de entrada e objetos desse cenário-problema Definir o processamento Identificar/definir os dados de saída Construir o
Tipos Algébricos. Programação Funcional. Capítulo 11. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto
Programação Funcional Capítulo 11 Tipos Algébricos José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/33 1 Tipos Algébricos 2/33 Tópicos 1 Tipos Algébricos 3/33