Introdução à linguagem Prolog
|
|
- Kléber Henriques Barateiro
- 6 Há anos
- Visualizações:
Transcrição
1 Introdução à linguagem Prolog Lógica Computacional 2 o ano LCC 2011/ Preâmbulo Ao longo do semestre iremos na disciplina de Lógica Computacional fazer uso da linguagem Prolog. O interpretador adoptado será o SWI-Prolog que está disponível para para a generalidade das plataformas (MS-Windows, Linux, macosx). Alguns apontadores úteis: Página web do SWI-Prolog: Manual do SWI-Prolog: Ao longo desta ficha são apresentados os conceitos elementares da linguagem Prolog. São também apresentados alguns exercícios que se recomenda que realizem e testem com o auxílio do interpretador (na aula prática teremos oportunidade de voltar a alguns deles). 2 Apresentação da linguagem Prolog 2.1 Conceitos Preliminares Termos. O Prolog é uma linguagem simbólica que manipula termos que podem ser: Variáveis denotadas por identificadores começados por letras maiúsculas (e.g. X, Y, Xs,...); Constantes átomos (identificadores começados por letras minúsculas) ou valores de tipos pré-definidos como inteiros, reais, strings, etc. (e.g. abc, xyz, 32, ); Termos Compostos termos da forma f(t1,...,tn) onde f é designado por functor (nome da função) e t1...tn são termos (e.g. xyz(x,abc), abc(abc(abc,abc)), +(4,2)) Obs.: como iremos ver adiante, o Prolog permite a declaração de operadores infixos. Assim irá permitir escrever como alternativa ao termo +(4,2) (o mesmo se aplica a outros operadores infixos que serão apresentados adiante). 1
2 Substituições e Unificação. O que caracteriza as variáveis é o facto de elas poderem vir a ser substituidas por outros termos. Considere-se o termo t(x,y): se substituirmos X por abc(a,3) e Y por Z obtemos o termos t(abc(a,3),z). Uma operação fundamental no modelo de execução do Prolog é o que se designa por Unificação de dois termos. A ideia consiste em encontrar uma substituição que iguale (se possível) os termos dados. Vejamos alguns exemplos: 1. X=4, Y=3 é um unificador dos termos abc(3,x) e abc(y,4); 2. X=4, Y=4 é um unificador dos termos abc(x,x) e abc(y,4); 3. os termos abc(3,4) e abc(x,x) não dispõe de unificador. 4. X=g(Z), Y=y é um unificador dos termos f(x,y) e f(g(z), Y). 5. X=g(a), Y=y, Z=a é um unificador dos termos f(x,y) e f(g(z), Y). Uma característica partilhada pelos unificadores apresentados nos números (1), (2) e (4) é que se tratam dos unificadores mais gerais (qualquer outra substituição que unifique os termos pode ser expressa como um refinamento da substituição dada). Já no caso do unificador apresentado em (5) essa propriedade não se verifica: facilmente se verifica que a substituição pode ser obtida quando aplicamos a substituição [Z=a] ao unificador apresentado em (4). Adiante iremos ter oportunidade de aprofundar estes aspectos mais teóricos... Para já interessa reter que oprolog, quando unificar dois termos, determina sempre o unificador mais geral (i.e. a substituição mais simples que iguala os termos). Exercício 1 Determine o unificador mais geral para os seguintes pares de termos (se existir... naturalmente): 1. f(x, g(y )) e g(x, f(y )) 2. f(x, g(y )) e Z 3. f(x, g(y)) e f(g(y), X) 4. f(x) e X 5. f(x) e f(3 + 2) 6. f(3) e f(2 + 1) 7. f(3) e A(X) 2.2 Programas em Prolog Executar um programa em Prolog consiste em interrogar o interpretador sobre a validade de um dado predicado lógico. A resposta mais simples será então true ou fail (se o predicado for válido ou não, respectivamente). 2
3 Objectivo (Goal). Quando se invoca o SWI-Prolog, surge o prompt?- que assinala que o interpretador aguarda a introdução de um objectivo (também designado por query, ou goal). Calvin:~ jba$ /opt/local/bin/swipl Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version ) Copyright (c) University of Amsterdam. SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Please visit for details. For help, use?- help(topic). or?- apropos(word).?- Como referimos, o objectivo será um predicado lógico. Iremos ter oportunidade de definir novos predicados mas, para já, concentremo-nos na utilização do predicado prédefinido =/2 (o /2 significa que o predicado espera dois argumentos). Este predicado será válido precisamente quando os termos que forem passados como argumentos unificarem. Assim podemos introduzir:?- =(3,3). true.?- 3=3. true.?- 3=2.?- 3=X. X = 3.?- 3+2=X. X = 3+2.?- 3 + X = Y * 2.?- Os exemplos apresentados revelam-nos duas coisas: (1) podemos utilizar a notação infixa e, (2) quando no objectivo estão envolvidas variáveis o Prolog retorna uma substituição dessas variáveis que verifiquem o predicado (ou falha, se não existir nenhuma substituição nessas condições) podemos então dizer que, intuitivamente, as variáveis dos objectivos estão quantificadas existencialmente. Exercício 2 Interrogue o interpretador de Prolog por forma a ele retornar os unificadores mais gerais atrás solicitados. 3
4 2.3 Base de Conhecimento Referimos que executar um programa em Prolog consiste em interrogar o interpretador relativamente a um objectivo. Mas, em que é que consiste um programa Prolog?. Um programa em Prolog será a base de conhecimento que o interpretador utiliza para determinar a validade do objectivo pedido. Essa base de conhecimento será consituída por: Factos: que estabelecem a validade imediata (de instâncias) de predicados; Regras: que condicionam a validade de predicados à validade de sub-objectivos. Factos. Comecemos pelos primeiros. Como exemplos de factos podemos ter: pai(joao,manuel). pai(cristina, jose). pai(joaquim,manuel). pai(francisco,joao). pai(helena,joao) Com base nestes factos, diriamos que pai(joaquim,manuel) é válido mas pai(joaquim,jose) já não o é (porque nada estabelece a sua validade). Para verificar isso com o Prolog, necessitamos de carregar a base de conhecimento no interpretador. Para tal devemos: 1. gravar um ficheiro com os factos apresentados (normalmente dá-se a extensão.pl aos ficheiros Prolog, e.g. pai.pl ); 2. carregar o ficheiro no interpretador por intermédio do predicado pré-definido consult (e.g. consult(pai.pl) ). Exercício 3 Verifique a validade de alguns objectivos com a base de conhecimento apresentada. O que acontece quando se inclui variáveis? Por vezes, o interpretador retorna uma substituição de resultado sem voltar ao prompt inicial. Isso assinala que a solução apresentada é uma de várias possíveis, podendo o utilizador: digitar. (ponto) e retornar ao prompt inicial; digitar ; (ponto e vírgula) para solicitar outra solução. Exercício 4 Introduza um predicado na base de conhecimento que permita determinar todos os filhos de manuel. O que aconteceria se incluisse na base de conhecimento o facto pai(x,carlos)? Experimente... (verifique o impacto de o incluir no início e no fim da base de conhecimento). 4
5 O exercício anterior permite concluir que, nos factos, devemos entender as variáveis que ocorrem nos factos como quantificadas universalmente. Se as questões colocadas ao interpretador de Prolog são predicados lógicos, é natural perguntarmo-nos como construir predicados à custa de conectivas lógicas (como e, ou, etc.). O Prolog tem definido os operadores: conjunção: denotado por uma vírgula (,) disjunção: denotado por um ponto e vírgula (;) (As restantes conectivas lógicas proposicionais serão introduzidas mais tarde.) A título de exemplo, poderíamos interrogar o Prolog com o seguinte goal composto:?- pai(x,manuel), pai(x,manuel). X = joao ; X = joana.?- Regras. A expressividade do Prolog resulta do facto de permitir incluir, na base de conhecimento, regras que condicionam a validade de um predicado (colocado no lado esquerdo do operador :-, e designado por cabeça da regra) à validade de um conjunto de outros predicados (designados por corpo da regra). A título de exemplo, temos que a regra: avo(x,y) :- pai(x,z), pai(z,y). Esta regra diz-nos que o predicado avo(x,y) será válido quando for válido pai(x,z) e simultaneamente for também válido pai(z,y) (para quaisquer instâncias de X, Y, Z). Quando acrescentada à base de conhecimento apresentada acima, permite que o Prolog responda afirmativamente ao predicado avo(francisco,manuel) o interpretador de Prolog será capaz de encontrar instâncias que verificam o corpo da regra (no caso, pai(francisco,joao) e pai(joao,manuel)). Note que nas regras, as variáveis que ocorrem na cabeça da regra devem ser entendidas como quantificadas universalmente (como nos factos). Já as que só ocorrem no corpo da regra devem ser entendidas como quantificadas existencialmente (como nos objectivos). Exercício 5 Estenda a base de conhecimento para exprimir outros graus de parentesco, como irmão, tio, etc. 3 Manipulação de listas Um exemplo de um tipo estruturado muito utilizado em Prolog são as listas. A sintaxe pré-definida das listas é [] para denotar a lista vazia e [H T] que denotar a lista com cabeça H e cauda T. Como um exemplo de um predicado envolvendo listas, considere-se o predicado que verifique se um dado elemento é a cabeça de uma lista: 5
6 head(x,[x _]). Claro está que, tratando-se as listas de um tipo recursivo, a definição de predicados interessantes sobre listas passa por se definirem predicados recursivos. A título de exemplo, vamos considerar a definição do predicado member/2 que verifique se um dado elemento pertence a uma lista. member(x,[x _]). member(x,[_ T]) :- member(x,t). Este predicado foi definido de forma análoga à função recursiva elem do Haskell: um elemento pertence a uma lista se for a cabeça dessa lista, ou se pertencer à cauda. Um exemplo da utilização deste predicado seria:?- member(2,[1,2,3]). true.?- member(4,[1,2,3]). Mas em Prolog podemos também utiliza-lo com variáveis não instanciadas com o objectivo de determinar quais os elementos de uma lista:?- member(x,[1,2,3]). X = 1 ; X = 2 ; X = 3 ; Ou até para determinar soluções a questões mais complicadas, como quais os elementos pares de uma lista:?- member(x,[3,5,4,6,5,7]), X mod 2 =:= 0. X = 4 ; X = 6 ; Exercício 6 1. Defina o predicado concat/3 que verifique quando uma lista é a concatenação de outras duas. Verifique o resultado quando o invoca com diferentes listas instanciadas. 4 Operações aritméticas Já vimos que o Prolog aceita termos que representem expressões matemáticas, como 3+4*2. Mas quando manipulamos esses termos estamos normalmente interessados em avaliar essas expressões (i.e. calcular o seu resultado). O Prolog disponibiliza para o efeito o predicado is que avalia o segundo argumento e unifica o resultado com o primeiro. Alguns exemplos (onde se utiliza a notação infixa para o predicado): 6
7 ?- X is 3+2. X = 5.?- 3+2 is 2+3.?- 5 is 3+2. true.?- 5 is X+2. ERROR: is/2: Arguments are not sufficiently instantiated Um aspecto importante na utilização do predicado is é a assimetria induzida: o segundo argumento deve ser sempre uma expressão completamente instanciada. Assim, se definirmos o predicado: soma(x,y,z) :- X is Y + Z. devemos considerar o segundo e o terceiro argumentos como argumentos de entrada, que necessitam estar devidamente instanciados. Uma forma compacta de se exprimir esse facto (normalmente utilizada na documentação) é através da assinatura soma(-x,+y,+z) assim identifica-se o argumento Y e Z como de entrada e X como de saída. Esta mesma convenção é utilizada no manual do SWI-Prolog, como se pode confirmar invocando o predicato apropos(is) (ou, alternativamente, help(is)). Exercício 7 1. Defina o predicado fact(-r,+x) que suceda quando R for o factorial de X. 2. Uma forma alternativa de lidar com números naturais consiste em considerar termos zero, suc(zero), suc(suc(zero)), etc. (i.e. utilizar notação unária para os naturais). Defina o predicado nat2int/2 que sucede quando o primeiro argumento é a representação unária do segundo. 3. No predicado definido na alínea anterior, verifique: que argumentos tem de ser utilizados como entrada e como saída?; o que acontece quando solicita ao interpretador várias respostas? 4. Verifique, com o auxílio do mecanismo de help do SWI-Prolog (ou da documentação on-line, se preferir) qual a funcionalidade oferecida pelos operadores: =:=, =\=, <, =<, 5 Inferência do Prolog Um objectivo em Prolog consiste numa lista de predicados. O resultado da execução desse objectivo no interpretador consiste numa substituição que verifique esses predicados. O processo construção da substituição é normalmente designado por inferência, e pode ser justificado construindo uma árvore como se descreve: 7
8 Na raiz da árvore, coloca-se a lista de predicados. O Prolog irá processar cada predicado dessa lista por ordem. Para cada predicado, o Prolog irá procurar encontrar na base de conhecimento uma instância dum facto ou duma regra cuja cabeça unifique com esse predicado. Esta procura processa-se também pela ordem pela qual as definições ocorrem na base de conhecimento. Quando é encontrada uma regra nas condições referidas, cria-se um descendente na árvore contendo a lista já afectada pela substituição resultante da unificação (relembre que o resultada na unificação é uma substituição das variáveis) e onde o predicado em análise é substituído pelo lado direito da regra (ou simplesmente desaparece, no caso dos factos). É habitual anotarmos os arcos da árvore com as substituições resultantes das unificações. Quando existe mais do que uma possibilidade para a referida unificação (e.g. várias regras são aplicáveis), traduz-se por uma ramificação da árvore de inferência. Operacionalmente, o Prolog trata esta ramificação pelo mecanismo de backtracking (travessia depth-first da árvore). Quando a lista de predicados fica vazia, cria-se uma folha na árvore denotada como true representa um resultado apresentado ao utilizador (a substituição calculada ao longo do caminho). Quando não existe qualquer regra na base de conhecimento que unifique com o primeiro predicado da lista, cria-se uma folha denotada por A árvore de derivação para o objectivo member(x,[1,2]), X mod 2 =:= 0 será: member(x,[1,2]), X mod 2 =:= 0 X = 1 1 mod 2 =:= 0 member(x,[2]), X mod 2 =:= 0 fail X = 2 2 mod 2==0 member(x,[]), X mod 2 =:= 0 yes (X = 2) fail Exercício 8 Considere o predicato fact/2 definido no exercício Apresente a árvore de inferência para o objectivo fact(r,2). Exercício 9 Considere a seguinte definição para o predicado nat2int/2 (c.f. exercício 7). nat2int(zero,0). nat2int(suc(x),n) :- nat2int(x,n2), N is N Apresente a árvore de inferência para o objectivo nat2int(suc(suc(zero)),x). 2. Apresente a árvore de inferência para o objectivo nat2int(x,2). 3. Comente os resultados obtidos. Consegue propor alguma forma de ultrapassar os problemas detectados? 8
PROLOG OPERADORES PRÉ-DEFINIDOS
118 11 PROLOG OPERADORES PRÉ-DEFINIDOS Exercício 11.6 Suponha que tem uma base de dados que indica as notas que os alunos tiveram nas várias disciplinas (nota(nome,disciplina,nota)) e quais os alunos inscritos
Leia maisAula Prática 2. Paradigmas da Programação I / Programação Funcional
Aula Prática 2 Paradigmas da Programação I / Programação Funcional ESI/MCC 1 o ano (2005/2006) Nesta aula pretende-se introduzir os conceitos seguintes: valores e expressões; tipos básicos e tipos compostos;
Leia maisTó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
Leia maisLógica Proposicional
Lógica Proposicional Lógica Computacional Carlos Bacelar Almeida Departmento de Informática Universidade do Minho 2007/2008 Carlos Bacelar Almeida, DIUM LÓGICA PROPOSICIONAL- LÓGICA COMPUTACIONAL 1/28
Leia maisRecursã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
Leia maisProlog. 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
Leia maisProgramaçã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)
Leia maisTipos 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
Leia maisLinguagens 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
Leia maisCapí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
Leia maisCENTRO 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
Leia maisDescriçã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
Leia maisBUSCA 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:
Leia maisLógica Computacional Aula 4
Lógica Computacional Aula 4 DCC/FCUP 2017/18 Conteúdo 1 Lógica proposicional 1 1.1 Fórmulas de Horn.......................................... 1 1.2 Satisfazibilidade............................................
Leia maisListas 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
Leia maisLinguagens 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
Leia maisTeoria Elementar dos Conjuntos
Teoria Elementar dos Conjuntos Este capítulo visa oferecer uma breve revisão sobre teoria elementar dos conjuntos. Além de conceitos básicos importantes em matemática, a sua imprtância reside no fato da
Leia maisLayout. 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
Leia mais03/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
Leia maisAula 2: Linguagem Proposicional
Lógica para Computação Primeiro Semestre, 2015 Aula 2: Linguagem Proposicional DAINF-UTFPR Prof. Ricardo Dutra da Silva Linguagens naturais, como o nosso Português, podem expressar ideias ambíguas ou imprecisas.
Leia maisMD Lógica de Proposições Quantificadas Cálculo de Predicados 1
Lógica de Proposições Quantificadas Cálculo de Predicados Antonio Alfredo Ferreira Loureiro loureiro@dcc.ufmg.br http://www.dcc.ufmg.br/~loureiro MD Lógica de Proposições Quantificadas Cálculo de Predicados
Leia maisCapí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
Leia maisLógica Computacional
Aula Teórica 13: Dedução Natural em Lógica Proposicional António Ravara Simão Melo de Sousa Departamento de Informática, Faculdade de Ciências e Tecnologia, Universidade Nova de Lisboa Departamento de
Leia maisUSANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS. Bruno Maffeo Departamento de Informática PUC-Rio
USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS Bruno Maffeo Departamento de Informática PUC-Rio MÉTODO INDUTIVO O método indutivo para resolver problemas aqui empregado inspira-se na formulação mais
Leia maisINE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA
INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA PARA A COMPUTAÇÃO PROF. DANIEL S. FREITAS UFSC - CTC - INE Prof. Daniel S. Freitas - UFSC/CTC/INE/2007 p.1/59 1 - LÓGICA E MÉTODOS DE PROVA 1.1) Lógica Proposicional
Leia maisLógica Computacional DCC/FCUP 2017/18
2017/18 1 Lógica de primeira ordem Linguagens da lógica de primeira ordem Termos Fórmulas Semântica de Lógica de primeira ordem Lógica de primeira ordem Na lógica proposicional não é possível representar
Leia maisAula Prática 3. Paradigmas da Programação I / Programação Funcional. ESI/MCC 1 o ano (2005/2006)
Aula Prática 3 Paradigmas da Programação I / Programação Funcional ESI/MCC 1 o ano (2005/2006) Nesta aula pretende-se que os alunos: consolidem os conceitos de expressão, tipo e redução; compreendam a
Leia maisFundamentos 1. Lógica de Predicados
Fundamentos 1 Lógica de Predicados Predicados e Quantificadores Estudamos até agora a lógica proposicional Predicados e Quantificadores Estudamos até agora a lógica proposicional A lógica proposicional
Leia maisCurso 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.
Leia maisProgramação Funcional Aulas 5 & 6
Programação Funcional Aulas 5 & 6 Sandra Alves DCC/FCUP 2016/17 Definições usando outras funções Podemos definir funções usando outras previamente definidas (por exemplo: do prelúdio-padrão). Exemplo:
Leia mais1 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
Leia maisVamos 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
Leia maisAlguns 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
Leia maisIntrodução à Programação
Introdução à Program João Manuel R. S. Tavares Sumário 1. Ciclo de desenvolvimento de um programa; 2. Descrição de algoritmos; 3. Desenvolvimento modular de programas; 4. Estruturas de controlo de um programa.
Leia maisProgramaçã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
Leia maisLógica Computacional
Aula Teórica 22: Departamento de Informática 16 de Maio de 2011 Introdução Revisão do procedimento Exemplo em Primeira Ordem Considere-se o seguinte conjunto de cláusulas, assumindo as variáveis universalmente
Leia maisPedro Vasconcelos DCC/FCUP. Programação Funcional 13 a Aula Definição de tipos
Programação Funcional 13 a Aula Definição de tipos Pedro Vasconcelos DCC/FCUP 2014 Declarações de sinónimos Podemos dar um nome novo a um tipo existente usando uma declaração de sinónimo. Exemplo (do prelúdio-padrão):
Leia maisPedro Vasconcelos DCC/FCUP. Programação Funcional 5 a Aula Definições recursivas
Programação Funcional 5 a Aula Definições recursivas Pedro Vasconcelos DCC/FCUP 2014 Definições usando outras funções Podemos definir funções usando outras previamente definidas (e.g. do prelúdio-padrão).
Leia maisIntroduçã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
Leia maisElisabete 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
Leia maisCálculo proposicional
O estudo da lógica é a análise de métodos de raciocínio. No estudo desses métodos, a lógica esta interessada principalmente na forma e não no conteúdo dos argumentos. Lógica: conhecimento das formas gerais
Leia maisProgramação. Folha Prática 5. Lab. 5. Departamento de Informática Universidade da Beira Interior Portugal. Copyright 2010 All rights reserved.
Programação Folha Prática 5 Lab. 5 Departamento de Informática Universidade da Beira Interior Portugal Copyright 2010 All rights reserved. 1. Revisão. 2. Objectivos. 3. Exercícios LAB. 5 5ª semana ESTRUTURAS
Leia maisConceitos Básicos Linguagem C
Conceitos Básicos Linguagem C PROF. MAURÍCIO A DIAS MACDIASPAE@GMAIL.COM 2 Método Método básico para construção de algoritmos 1. Compreender completamente o problema a ser resolvido, se possível dividindo
Leia maisBasicamente, um programa PROLOG é constituído por fatos acerca do domínio e regras que são sentenças ou fórmulas.
1 EXERCÍCIOS PROLOG Lógica Prof. Tacla (UTFPR/Curitiba) arquivo: ExProlog01.docx 1. Introdução Basicamente, um programa PROLOG é constituído por fatos acerca do domínio e regras que são sentenças ou fórmulas.
Leia mais3 AULA. Valorações e Tabelas de Verdade LIVRO. META: Apresentar tabelas de verdade para classificar proposições lógicas.
1 LIVRO Valorações e Tabelas de Verdade META: Apresentar tabelas de verdade para classificar proposições lógicas. OBJETIVOS: Ao fim da aula os alunos deverão ser capazes de: Aplicar valorações de um conjunto
Leia maisProgramaçã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
Leia maisComposição de Funções
Composição de Funções Existem muitas situações em que uma função depende de uma variável que, por sua vez, depende de outra, e assim por diante. Podemos dizer, por exemplo, que a concentração de monóxido
Leia maisIntrodução à Computação. Programas Básicos. ISEP DEI, Angelo Martins 2006 Programas Básicos - 1
Introdução à Computação Programas Básicos ISEP DEI, Angelo Martins 2006 Programas Básicos - 1 Conteúdo Exemplo de um programa Apresentação sumária da construção de um programa em VB. Objectos e o mecanismo
Leia mais8. Árvores. Fernando Silva DCC-FCUP. Estruturas de Dados. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38
8. Árvores Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38 Árvores - estruturas não lineares (1) Uma lista é um exemplo de uma estrutura de dados
Leia mais8. Árvores. Fernando Silva. Estruturas de Dados DCC-FCUP. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38
8. Árvores Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38 Árvores - estruturas não lineares (1) Uma lista é um exemplo de uma estrutura de dados
Leia maisPedro Vasconcelos DCC/FCUP. Programação Funcional 4 a Aula Listas
Programação Funcional 4 a Aula Listas Pedro Vasconcelos DCC/FCUP 2014 Listas Listas são coleções de elementos: em que a ordem é significativa; possivelmente com elementos repetidos. Listas em Haskell Uma
Leia maisCasamento de Padrão. Programação Funcional. Capítulo 5. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto
Programação Funcional Capítulo 5 Casamento de Padrão José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/63 1 Casamento de padrão 2 Expressão case 3 Definição
Leia maisLÓGICA DIGITAL - CONCEITOS. * Constantes. * Expressões: Aritméticas; Lógicas; Tabela Verdade; Relacionais; Booleanas. * Portas Lógicas.
* Tipos de Dados. * Constantes. * Expressões: Aritméticas; Lógicas; Tabela Verdade; Relacionais; Booleanas. * Portas Lógicas. 1 TIPOS DE DADOS Dados inteiros Representação das informações pertencentes
Leia maisLógica. Fernando Fontes. Universidade do Minho. Fernando Fontes (Universidade do Minho) Lógica 1 / 65
Lógica Fernando Fontes Universidade do Minho Fernando Fontes (Universidade do Minho) Lógica 1 / 65 Outline 1 Introdução 2 Implicações e Equivalências Lógicas 3 Mapas de Karnaugh 4 Lógica de Predicados
Leia maisCasamento de Padrão. Programação Funcional. Capítulo 6. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto
Programação Funcional Capítulo 6 Casamento de Padrão José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.2 1/66 1 Casamento de padrão 2 Expressão case 3 Definição
Leia maisLó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
Leia maisExpressões Regulares. Tiago Alves de Oliveira
Expressões Regulares Tiago Alves de Oliveira Introdução As expressões regulares consistem em uma maneira de representar um padrão de caracteres. Expressão Regular descreve um conjunto de cadeias de caracteres,
Leia maisAulas 10 e 11 / 18 e 20 de abril
1 Conjuntos Aulas 10 e 11 / 18 e 20 de abril Um conjunto é uma coleção de objetos. Estes objetos são chamados de elementos do conjunto. A única restrição é que em geral um mesmo elemento não pode contar
Leia maisMaterial Teórico - Módulo Equações do Segundo Grau. Equações de Segundo Grau: outros resultados importantes. Nono Ano do Ensino Funcamental
Material Teórico - Módulo Equações do Segundo Grau Equações de Segundo Grau: outros resultados importantes Nono Ano do Ensino Funcamental Autor: Prof. Fabrício Siqueira Benevides Revisor: Prof. Antonio
Leia maisLógica Proposicional Parte 2
Lógica Proposicional Parte 2 Como vimos na aula passada, podemos usar os operadores lógicos para combinar afirmações criando, assim, novas afirmações. Com o que vimos, já podemos combinar afirmações conhecidas
Leia maisUNIDADE 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
Leia maisExercícios para Fundamentos da Programação
Exercícios para Fundamentos da Programação Fausto Almeida, Cláudia Antunes, Ana Cardoso-Cachopo, Pedro Amaro de Matos, Francisco Saraiva de Melo Departamento de Engenharia Informática Instituto Superior
Leia maisESCOLA SUPERIOR DE TECNOLOGIA DE TOMAR DEPARTAMENTO DE ENGENHARIA INFORMÁTICA 2006/2007
ESCOLA SUPERIOR DE TECNOLOGIA DE TOMAR DEPARTAMENTO DE ENGENHARIA INFORMÁTICA INTRODUÇÃO À PROGRAMAÇÃO (ENG. INFORMÁTICA) COMPUTADORES E PROGRAMAÇÃO I (ENG. ELECTROTÉCNICA) 2006/2007 TRABALHO PRÁTICO Nº
Leia maisANEXO B Manual básico de SQL
ANEXO B Manual básico de SQL Este apêndice descreve como utilizar a Linguagem de Pesquisa Estruturada (SQL, Structured Query Language) para criar conjuntos de registros destinados às páginas dinâmicas.
Leia maisMATEMÁTICA DISCRETA E LÓGICA MATEMÁTICA PROF. APARECIDO EDILSON MORCELLI
MATEMÁTICA DISCRETA E LÓGICA MATEMÁTICA PROF. APARECIDO EDILSON MORCELLI CONSTRUÇÃO DA TABELA- VERDADE Dada a fórmula: {A [C (A C)]} Observamos três ocorrências de conectivos:,,. O último é a primeira
Leia maisProf. Esp. Andrew Rodrigues 1
Prof. Esp. Andrew Rodrigues www.andrewrodrigues.com.br www.andrewrodrigues.com.br 1 PHP em Ação PHP é uma linguagem de programação que pode fazer todo o tipo de coisas: avaliar dados de formulários enviados
Leia maisConceitos básicos de programação
Constantes class Exemplo { static void Main() { float fahr, celsius; int lower, upper, step; lower = 0; /* limite inferior da tabela de temperaturas */ upper = 300; /* limite superior */ step = 20; /*
Leia maisInstituto de Matemática e Estatística, UFF Março de 2011
,,,,, Instituto de Matemática e Estatística, UFF Março de 2011 ,, Sumário,,. finitos,. conjunto: por lista, por propriedade.. Igualdade,. Propriedades básicas.. ,, Christos Papadimitriou, Autor dos livros
Leia maisProgramação Funcional
Programação Funcional Capítulo 2 Primeiros Passos José Romildo Malaquias 2012.1 Departamento de Computação Universidade Federal de Ouro Preto 1 / 39 1 Glasgow Haskell Compiler 2 O módulo Prelude 3 Aplicação
Leia maisMatemática Discreta - 07
Universidade Federal do Vale do São Francisco Curso de Engenharia da Computação Matemática Discreta - 07 Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br www.univasf.edu.br/~jorge.cavalcanti www.twitter.com/jorgecav
Leia maisFundamentos de Lógica Matemática
Webconferência 3-01/03/2012 Inferência Lógica Prof. L. M. Levada http://www.dc.ufscar.br/ alexandre Departamento de Computação (DC) Universidade Federal de São Carlos (UFSCar) 2012/1 Objetivos Análise
Leia maisCompilador de LP3 para C3E e P3
Compilador de LP3 para C3E e P3 Luís Gil 1 13 de Junho de 2005 1 estudante de Ciências Informáticas no Instituto Superior Técnico 1 Introdução Este relatório descreve a sintaxe e a semântica da Linguagem
Leia maisf(h) δ h p f(x + h) f(x) (x) = lim
Capítulo 6 Derivação numérica Nesta seção vamos desenvolver métodos para estimar a derivada de uma função f calculada em um ponto x, f (x, a partir de valores conecidos de f em pontos próximos ao ponto
Leia maisÁrvores (ordenadas) Departamento de Ciência de Computadores da FCUP MC Aula 11 1
Árvores (ordenadas) Recordemos que, uma árvore é grafo (não dirigido) em que o número de vértices excede em 1 o número de arcos. Um vértice é acessível a todos os outros: a raiz. Os vértices que são acessíveis
Leia maisw 1 = v 1 + v 2 + v 3 w 2 = 2v 2 + v 3 (1) w 3 = v 1 + 3v 2 + 3v 3 também são linearmente independentes. T =
Independência e dependência linear ) a) Sejam v, v e v vectores linearmente independentes de um espaço linear S. Prove que os vectores também são linearmente independentes. Resolução Seja V a expansão
Leia maisUNIVERSIDADE FEDERAL DE PERNAMBUCO. Resumo. Nesta aula, apresentaremos a noção de integral indefinidada. Também discutiremos
CÁLCULO L NOTAS DA DÉCIMA OITAVA AULA UNIVERSIDADE FEDERAL DE PERNAMBUCO Resumo. Nesta aula, apresentaremos a noção de integral indefinidada. Também discutiremos a primeira técnica de integração: mudança
Leia maisEXPRESSÕES ARITMÉTICAS PARTE 1
AULA 5 EXPRESSÕES ARITMÉTICAS PARTE 1 5.1 Operadores aritméticos Os operadores aritméticos definem as operações aritméticas que podem ser realizadas sobre os números inteiros e reais. Para os inteiros,
Leia maisLaboratório 4 Correcção de erros sintácticos e tipos de dados primitivos
Instituto Politécnico de Setúbal Escola Superior de Tecnologia Departamento de Sistemas e Informática Laboratório 4 Correcção de erros sintácticos e tipos de dados primitivos Disciplina de Introdução à
Leia mais4 AULA. Regras de Inferência e Regras de Equivalência LIVRO. META: Introduzir algumas regras de inferência e algumas regras de equivalência.
1 LIVRO Regras de Inferência e Regras de Equivalência 4 AULA META: Introduzir algumas regras de inferência e algumas regras de equivalência. OBJETIVOS: Ao fim da aula os alunos deverão ser capazes de:
Leia maisparent 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
Leia maisExame de 1ª Época Introdução à Programação IGE e ETI 2003/02/25-1º semestre de 2002/2003 ISCTE
Recibo do Exame de 1ª Época de Introdução à Programação (IGE e ETI), 2003/02/25 1º semestre de 2002/2003, ISCTE Nome do aluno:... Número do aluno:... Assinatura do docente:... Notas: Exame de 1ª Época
Leia maisIntrodução a linguagem C. Introdução à Programação 06/07
Introdução a linguagem C Introdução à Programação 06/07 A LINGUAGEM DE PROGRAMAÇÃO C A linguagem C foi criada, na década de setenta, por Dennis M. Ritchie; Apesar de se considerar uma linguagem de alto
Leia maisLó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:
Leia maisInteligência Artificial IA II. LÓGICA DE PREDICADOS PARA REPRESENTAÇÃO DO CONHECIMENTO
Inteligência Artificial IA Prof. João Luís Garcia Rosa II. LÓGICA DE PREDICADOS PARA REPRESENTAÇÃO DO CONHECIMENTO 2004 Representação do conhecimento Para representar o conhecimento do mundo que um sistema
Leia maisEstrutura de um Algoritmo, Variáveis, Comandos de Entrada e Saída e Expressões Aritméticas
Estrutura de um Algoritmo, Variáveis, Comandos de Entrada e Saída e Expressões Aritméticas Estrutura de um Programa em Linguagem Algorítmica Nesse curso nós vamos utilizar a linguagem algorítmica para
Leia maisIME, UFF 10 de dezembro de 2013
Lógica IME, UFF 10 de dezembro de 2013 Sumário.... Considere o seguinte argumento Um problema de validade (1) p q q r r s s t p t (1) é válido ou não? A resposta é sim... Uma demonstração Uma demonstração
Leia maisVariáveis e Entrada de Dados Marco André Lopes Mendes marcoandre.googlepages.
Variáveis e Entrada de Dados Marco André Lopes Mendes marcoandre@ifc-araquari.edu.br marcoandre@gmail.com marcoandre.googlepages.com Algoritmos é a base Primeiro programa Este programa possui apenas uma
Leia maisProgramaçã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
Leia maisLinguagens de Programação
Linguagens de Programação Fabio Mascarenhas - 2015.2 http://www.dcc.ufrj.br/~fabiom/lp Introdução Quais das expressões abaixo têm o mesmo significado? (vector-ref a 42) Introdução Quais das expressões
Leia maisApêndice A. Pseudo-Linguagem
Apêndice A. Pseudo-Linguagem Apostila de Programação I A.1 Considerações Preliminares Os computadores convencionais se baseiam no conceito de uma memória principal que consiste de células elementares,
Leia maisUm alfabeto é um conjunto de símbolos indivisíveis de qualquer natureza. Um alfabeto é geralmente denotado pela letra grega Σ.
Linguagens O conceito de linguagem engloba uma variedade de categorias distintas de linguagens: linguagens naturais, linguagens de programação, linguagens matemáticas, etc. Uma definição geral de linguagem
Leia maisTeoria das Linguagens. Linguagens Formais e Autómatos (Linguagens)
Teoria das Lic. em Ciências da Computação Formais e Autómatos () Carla Mendes Dep. Matemática e Aplicações Universidade do Minho 2010/2011 Teoria das - LCC - 2010/2011 Dep. Matemática e Aplicações - Univ.
Leia maisTutoria Matemática para Informática Teoria geral dos conjuntos Pertinência Inclusão Operações com conjuntos
Tutoria Matemática para Informática Teoria geral dos conjuntos Pertinência Є (pertence) ou Є (não pertence) Sempre verificando de elemento para conjunto { } ou Ø = vazio {Ø} = conjunto com elemento vazio
Leia maisCAPÍTULO 4 - OPERADORES E EXPRESSÕES
CAPÍTULO 4 - OPERADORES E EXPRESSÕES 4.1 - OPERADORES ARITMÉTICOS Os operadores aritméticos nos permitem fazer as operações matemáticas básicas, usadas no cálculo de expressões aritméticas. A notação usada
Leia maisDesenho de algoritmos
Folha Prática Desenho de Algoritmos 1 Desenho de algoritmos Resolver as questões que se seguem usando fluxogramas ou uma outra linguagem para algoritmos. A. Instruções/acções de atribuição e leitura/escrita
Leia maisUNIVERSIDADE FEDERAL DE PERNAMBUCO
CÁLCULO L1 NOTAS DA TERCEIRA AULA UNIVERSIDADE FEDERAL DE PERNAMBUCO Resumo. Nesta aula introduziremos o conceito de derivada e a definição de uma reta tangente ao gráfico de uma função. Também apresentaremos
Leia maisInformática no Ensino de Matemática Prof. José Carlos de Souza Junior
Informática no Ensino de Matemática Prof. José Carlos de Souza Junior http://www.unifal-mg.edu.br/matematica/?q=disc jc Aula 04 ATIVIDADE 01 Outro grande recurso do GeoGebra é o de resolver simbolicamente
Leia maisSoluções dos exercícios propostos
Indução e Recursão Soluções dos exercícios propostos 1 Iremos demonstrar que a expressão proposta a seguir é correta: i = 0 + + + + + (n 1) = n(n 1), para n > 0 0 i
Leia maisLógica para Programação
Licenciatura Engenharia Informática e de Computadores Lógica para rogramação epescagem do rimeiro Teste 13 de Julho de 2010 09:00 10:30 Nome: Número: Esta prova, individual e sem consulta, tem 9 páginas
Leia maisLógica Computacional
Aula Teórica 20: Forma Normal de Skolem e António Ravara Simão Melo de Sousa Departamento de Informática, Faculdade de Ciências e Tecnologia, Universidade Nova de Lisboa Departamento de Informática, Faculdade
Leia mais