Este documento apresenta conceitos básicos de programação lógica em Prolog, incluindo: (1) aritmética, com operadores e predicados internos como 'is'; (2) gerenciamento de dados no banco de fatos de Prolog usando predicados como 'asserta' e 'retract'; (3) exemplos de implementação de comandos em um jogo de busca de objetos chamado "Nani Search".
Este documento apresenta alguns conceitos básicos sobre Prolog, incluindo:
1) Fatos são usados para armazenar informações e podem ser consultados como em um banco de dados;
2) Átomos, variáveis e termos são usados como argumentos em fatos e consultas;
3) Consultas funcionam por meio de unificação entre o padrão da consulta e fatos no banco de dados.
O documento descreve conceitos básicos de programação lógica em Prolog, incluindo:
1) O uso de regras para definir predicados e realizar consultas armazenadas;
2) Como regras funcionam através de múltiplos níveis de consultas recursivas;
3) Exemplos de como regras podem ser usadas para resolver problemas e controlar fluxos de execução.
Este documento apresenta alguns conceitos básicos de Prolog, incluindo:
1) Consultas combinadas podem juntar objetivos lógicos usando vírgulas para representar conjunções;
2) Predicados internos já implementados no Prolog podem ser usados para tarefas como entrada/saída;
3) Exemplos demonstram o uso de consultas combinadas, predicados internos e exercícios de resolução.
Este documento apresenta uma introdução à programação lógica em Prolog. Discute como Prolog permite o desenvolvimento de programas usando lógica, definindo relacionamentos entre entidades e permitindo que o sistema determine se uma afirmação é verdadeira com base nesses relacionamentos. Apresenta um exemplo simples de um programa Prolog que define regras lógicas sobre mortalidade e pessoas, e mostra como Prolog pode responder a consultas sobre esse banco de dados lógico.
O documento discute o uso de estruturas de dados em Prolog para representar objetos em um jogo de aventura de forma mais rica e complexa. Inicialmente apresenta como átomos simples podem ser combinados em estruturas com funtores e argumentos. Em seguida demonstra exemplos de estruturas para descrever objetos com atributos como cor, tamanho e peso. Por fim, mostra como predicados podem ser modificados para lidar com essas estruturas complexas em vez de átomos simples.
Este documento discute o processo de unificação em Prolog. Em três frases:
A unificação é o algoritmo interno de Prolog para casamento de padrões. Ele liga variáveis a termos para igualar estruturas, falhando se não houver valores possíveis. Variáveis ligadas por unificação mantêm seus relacionamentos mesmo quando novas ligações ocorrem posteriormente.
O documento descreve os conceitos fundamentais da linguagem de programação PROLOG, incluindo: (1) Fatos, regras e consultas que formam a base de conhecimento; (2) Operadores lógicos como variáveis, conjunção e disjunção; (3) Mecanismos de backtracking, cut e fail para tratar recursividade.
Este documento apresenta alguns conceitos básicos sobre Prolog, incluindo:
1) Fatos são usados para armazenar informações e podem ser consultados como em um banco de dados;
2) Átomos, variáveis e termos são usados como argumentos em fatos e consultas;
3) Consultas funcionam por meio de unificação entre o padrão da consulta e fatos no banco de dados.
O documento descreve conceitos básicos de programação lógica em Prolog, incluindo:
1) O uso de regras para definir predicados e realizar consultas armazenadas;
2) Como regras funcionam através de múltiplos níveis de consultas recursivas;
3) Exemplos de como regras podem ser usadas para resolver problemas e controlar fluxos de execução.
Este documento apresenta alguns conceitos básicos de Prolog, incluindo:
1) Consultas combinadas podem juntar objetivos lógicos usando vírgulas para representar conjunções;
2) Predicados internos já implementados no Prolog podem ser usados para tarefas como entrada/saída;
3) Exemplos demonstram o uso de consultas combinadas, predicados internos e exercícios de resolução.
Este documento apresenta uma introdução à programação lógica em Prolog. Discute como Prolog permite o desenvolvimento de programas usando lógica, definindo relacionamentos entre entidades e permitindo que o sistema determine se uma afirmação é verdadeira com base nesses relacionamentos. Apresenta um exemplo simples de um programa Prolog que define regras lógicas sobre mortalidade e pessoas, e mostra como Prolog pode responder a consultas sobre esse banco de dados lógico.
O documento discute o uso de estruturas de dados em Prolog para representar objetos em um jogo de aventura de forma mais rica e complexa. Inicialmente apresenta como átomos simples podem ser combinados em estruturas com funtores e argumentos. Em seguida demonstra exemplos de estruturas para descrever objetos com atributos como cor, tamanho e peso. Por fim, mostra como predicados podem ser modificados para lidar com essas estruturas complexas em vez de átomos simples.
Este documento discute o processo de unificação em Prolog. Em três frases:
A unificação é o algoritmo interno de Prolog para casamento de padrões. Ele liga variáveis a termos para igualar estruturas, falhando se não houver valores possíveis. Variáveis ligadas por unificação mantêm seus relacionamentos mesmo quando novas ligações ocorrem posteriormente.
O documento descreve os conceitos fundamentais da linguagem de programação PROLOG, incluindo: (1) Fatos, regras e consultas que formam a base de conhecimento; (2) Operadores lógicos como variáveis, conjunção e disjunção; (3) Mecanismos de backtracking, cut e fail para tratar recursividade.
O documento resume as principais características da linguagem Prolog. Em 1) Prolog é uma linguagem declarativa que define fatos e relações sobre um problema. 2) Foi criada em 1971 para processamento de linguagens naturais. 3) Pode ser usada em lógica matemática, bancos de dados e jogos.
O documento descreve a linguagem de programação Prolog, incluindo sua criação, elementos básicos como átomos, fatos e regras, e exemplos de programas em Prolog que lidam com aritmética, listas e condicionais.
Programação Estruturada em Python - Aula 02 Controlde de DecisãoEduardo S. Pereira
1) O documento apresenta os conceitos de programação estruturada em Python, incluindo estruturas de controle, controle de decisão, formatação de strings, estrutura de decisão if/else, blocos aninhados e operação ternária.
O documento discute a introdução à linguagem de programação Python. Aborda tópicos como tipos de dados primitivos, variáveis, operadores matemáticos e lógicos, estruturas de controle como if/else e loops while e for. Também apresenta listas e strings como estruturas de dados fundamentais em Python.
O documento discute vários algoritmos de ordenação, incluindo ordenação por inserção, ordenação por seleção e ordenação por bolhas. Descreve as ideias por trás de cada algoritmo e fornece códigos em C como exemplos. Também discute a complexidade temporal de cada algoritmo e quando cada um é mais apropriado para uso.
Este documento apresenta um resumo sobre representação e operações com listas no Prolog. As listas são representadas internamente de forma recursiva com cabeça e corpo. Várias operações são descritas como concatenação, inversão, remoção de elementos e testes para validar a representação. Listas dinâmicas também são abordadas para permitir que listas sejam modificadas durante a execução de um programa.
O documento discute listas em Prolog. Resume-se em 3 frases:
1) Listas são uma poderosa estrutura de dados em Prolog representada por colchetes com termos separados por vírgulas.
2) A notação [Cabeça|Calda] permite acessar o primeiro elemento e o resto da lista, possibilitando a escrita de predicados recursivos como membro/2 e anexar/3.
3) Listas podem ser usadas para representar dados como localização de objetos e predicados podem ser escritos para manipular essas list
Regras de Produção:o Motor de Inferência JESSelliando dias
Este documento descreve os principais componentes de um motor de inferência baseado em regras de produção, incluindo: 1) Um formalismo lógico para representar conhecimento; 2) Um mecanismo de inferência para aplicar regras; 3) Como regras de produção representam conhecimento proceduralmente.
O documento apresenta exemplos de programação em Prolog, incluindo fatos e regras para definir relações entre argumentos. É apresentada uma árvore genealógica como exemplo e exercícios para representá-la em Prolog utilizando regras para definir relações como pai, mãe, homem e mulher. Operações aritméticas e comparações numéricas em Prolog também são explicadas.
O documento discute funções do PHP relacionadas a strings e arrays. Na seção de strings, explica funções como strlen, strpos, str_replace, trim e outras. Na seção de arrays, explica como imprimir, adicionar, remover e ordenar elementos de arrays, e funções como count, array_map e array_search.
Este documento apresenta uma aula sobre Python, abordando: 1) revisão dos conceitos básicos da linguagem; 2) exemplo de programa que calcula a média de notas de alunos; 3) uso de funções como input e convertendo strings para números; 4) desafio da aula anterior para ordenar nomes digitados.
Python é uma linguagem de programação fácil de aprender e poderosa, orientada a objetos com vasta biblioteca de classes e funções. O documento descreve características de Python, quem a usa, versões, como instalar, editores, conceitos básicos como variáveis, strings, listas, desvios condicionais e laços, além de módulos e exemplos de uso.
Este documento apresenta um curso introdutório sobre Python. Ele inclui seções sobre blocos, controle de fluxo, funções, tratamento de exceções, estruturas de dados como listas e dicionários, e módulos. O documento fornece exemplos de código Python para ilustrar os principais conceitos da linguagem.
O documento resume os principais tópicos sobre Perl moderno apresentados em 5 dias de treinamento. Os tópicos incluem expressões regulares, tratamento de exceções, módulos, orientação a objetos, bancos de dados e desenvolvimento web.
A aula aborda recursividade e apresenta exemplos de funções recursivas para calcular fatorial e potenciação. O professor também propõe exercícios para encontrar o maior elemento de um vetor e somar os elementos de um vetor usando recursividade.
O documento apresenta uma aula sobre Python, abordando os seguintes tópicos:
- Criação e chamada de funções;
- Uso de listas, tuplas, conjuntos e dicionários;
- Importação e uso dos módulos random, urllib2 e zipfile;
- Criação de módulos e pacotes próprios.
Este documento apresenta uma introdução à linguagem de programação Python. Resume os principais pontos apresentados:
1) Python foi criada em 1990 por Guido van Rossum como uma alternativa à linguagem ABC, sendo de código aberto e multiplataforma.
2) A sintaxe de Python é baseada em indentação para definir blocos de código e possui tipos de dados básicos como inteiros, floats, strings, listas e dicionários.
3) Python suporta programação procedural, orientada a objetos e funcional, possuindo controle de fluxo
O documento apresenta informações sobre registros em C++, incluindo definição, declaração, acesso a membros, vetores de registros e passagem de registros como parâmetros para funções. É apresentado um exemplo de cadastro de alunos usando registros e vetores.
- A aula apresenta listas circulares e duplamente encadeadas, explicando que em uma lista duplamente encadeada cada nó possui ponteiros para o nó anterior e posterior, permitindo percorrer a lista em ambas as direções. Já uma lista circular é uma lista duplamente encadeada em que o último nó aponta para o primeiro. O documento também apresenta exemplos de implementação dessas estruturas.
O documento apresenta um resumo sobre Perl Moderno, abordando tópicos como:
1) Expressões regulares, com explicações sobre os operadores m//, modificadores e quantificadores;
2) Tratamento de exceções com Try::Tiny e tratamento de erros;
3) Manipulação de dados como arquivos, datas e logs.
O documento descreve conceitos de programação concorrente em Java, incluindo: 1) como criar e executar threads daemon; 2) como tratar exceções em threads; 3) como usar variáveis de thread locais para evitar conflitos de acesso a dados compartilhados. Exemplos de código são fornecidos para ilustrar cada tópico.
O documento descreve uma aula sobre desenvolvimento de sistemas web usando HTML5. Ele inclui introduções sobre HTML, JavaScript e o fim da "batalha dos navegadores", além de detalhar os principais componentes de uma aplicação HTML5 e os passos iniciais para criar uma aplicação, como a estrutura de pastas, o arquivo HTML, CSS e JavaScript.
O documento resume as principais características da linguagem Prolog. Em 1) Prolog é uma linguagem declarativa que define fatos e relações sobre um problema. 2) Foi criada em 1971 para processamento de linguagens naturais. 3) Pode ser usada em lógica matemática, bancos de dados e jogos.
O documento descreve a linguagem de programação Prolog, incluindo sua criação, elementos básicos como átomos, fatos e regras, e exemplos de programas em Prolog que lidam com aritmética, listas e condicionais.
Programação Estruturada em Python - Aula 02 Controlde de DecisãoEduardo S. Pereira
1) O documento apresenta os conceitos de programação estruturada em Python, incluindo estruturas de controle, controle de decisão, formatação de strings, estrutura de decisão if/else, blocos aninhados e operação ternária.
O documento discute a introdução à linguagem de programação Python. Aborda tópicos como tipos de dados primitivos, variáveis, operadores matemáticos e lógicos, estruturas de controle como if/else e loops while e for. Também apresenta listas e strings como estruturas de dados fundamentais em Python.
O documento discute vários algoritmos de ordenação, incluindo ordenação por inserção, ordenação por seleção e ordenação por bolhas. Descreve as ideias por trás de cada algoritmo e fornece códigos em C como exemplos. Também discute a complexidade temporal de cada algoritmo e quando cada um é mais apropriado para uso.
Este documento apresenta um resumo sobre representação e operações com listas no Prolog. As listas são representadas internamente de forma recursiva com cabeça e corpo. Várias operações são descritas como concatenação, inversão, remoção de elementos e testes para validar a representação. Listas dinâmicas também são abordadas para permitir que listas sejam modificadas durante a execução de um programa.
O documento discute listas em Prolog. Resume-se em 3 frases:
1) Listas são uma poderosa estrutura de dados em Prolog representada por colchetes com termos separados por vírgulas.
2) A notação [Cabeça|Calda] permite acessar o primeiro elemento e o resto da lista, possibilitando a escrita de predicados recursivos como membro/2 e anexar/3.
3) Listas podem ser usadas para representar dados como localização de objetos e predicados podem ser escritos para manipular essas list
Regras de Produção:o Motor de Inferência JESSelliando dias
Este documento descreve os principais componentes de um motor de inferência baseado em regras de produção, incluindo: 1) Um formalismo lógico para representar conhecimento; 2) Um mecanismo de inferência para aplicar regras; 3) Como regras de produção representam conhecimento proceduralmente.
O documento apresenta exemplos de programação em Prolog, incluindo fatos e regras para definir relações entre argumentos. É apresentada uma árvore genealógica como exemplo e exercícios para representá-la em Prolog utilizando regras para definir relações como pai, mãe, homem e mulher. Operações aritméticas e comparações numéricas em Prolog também são explicadas.
O documento discute funções do PHP relacionadas a strings e arrays. Na seção de strings, explica funções como strlen, strpos, str_replace, trim e outras. Na seção de arrays, explica como imprimir, adicionar, remover e ordenar elementos de arrays, e funções como count, array_map e array_search.
Este documento apresenta uma aula sobre Python, abordando: 1) revisão dos conceitos básicos da linguagem; 2) exemplo de programa que calcula a média de notas de alunos; 3) uso de funções como input e convertendo strings para números; 4) desafio da aula anterior para ordenar nomes digitados.
Python é uma linguagem de programação fácil de aprender e poderosa, orientada a objetos com vasta biblioteca de classes e funções. O documento descreve características de Python, quem a usa, versões, como instalar, editores, conceitos básicos como variáveis, strings, listas, desvios condicionais e laços, além de módulos e exemplos de uso.
Este documento apresenta um curso introdutório sobre Python. Ele inclui seções sobre blocos, controle de fluxo, funções, tratamento de exceções, estruturas de dados como listas e dicionários, e módulos. O documento fornece exemplos de código Python para ilustrar os principais conceitos da linguagem.
O documento resume os principais tópicos sobre Perl moderno apresentados em 5 dias de treinamento. Os tópicos incluem expressões regulares, tratamento de exceções, módulos, orientação a objetos, bancos de dados e desenvolvimento web.
A aula aborda recursividade e apresenta exemplos de funções recursivas para calcular fatorial e potenciação. O professor também propõe exercícios para encontrar o maior elemento de um vetor e somar os elementos de um vetor usando recursividade.
O documento apresenta uma aula sobre Python, abordando os seguintes tópicos:
- Criação e chamada de funções;
- Uso de listas, tuplas, conjuntos e dicionários;
- Importação e uso dos módulos random, urllib2 e zipfile;
- Criação de módulos e pacotes próprios.
Este documento apresenta uma introdução à linguagem de programação Python. Resume os principais pontos apresentados:
1) Python foi criada em 1990 por Guido van Rossum como uma alternativa à linguagem ABC, sendo de código aberto e multiplataforma.
2) A sintaxe de Python é baseada em indentação para definir blocos de código e possui tipos de dados básicos como inteiros, floats, strings, listas e dicionários.
3) Python suporta programação procedural, orientada a objetos e funcional, possuindo controle de fluxo
O documento apresenta informações sobre registros em C++, incluindo definição, declaração, acesso a membros, vetores de registros e passagem de registros como parâmetros para funções. É apresentado um exemplo de cadastro de alunos usando registros e vetores.
- A aula apresenta listas circulares e duplamente encadeadas, explicando que em uma lista duplamente encadeada cada nó possui ponteiros para o nó anterior e posterior, permitindo percorrer a lista em ambas as direções. Já uma lista circular é uma lista duplamente encadeada em que o último nó aponta para o primeiro. O documento também apresenta exemplos de implementação dessas estruturas.
O documento apresenta um resumo sobre Perl Moderno, abordando tópicos como:
1) Expressões regulares, com explicações sobre os operadores m//, modificadores e quantificadores;
2) Tratamento de exceções com Try::Tiny e tratamento de erros;
3) Manipulação de dados como arquivos, datas e logs.
O documento descreve conceitos de programação concorrente em Java, incluindo: 1) como criar e executar threads daemon; 2) como tratar exceções em threads; 3) como usar variáveis de thread locais para evitar conflitos de acesso a dados compartilhados. Exemplos de código são fornecidos para ilustrar cada tópico.
O documento descreve uma aula sobre desenvolvimento de sistemas web usando HTML5. Ele inclui introduções sobre HTML, JavaScript e o fim da "batalha dos navegadores", além de detalhar os principais componentes de uma aplicação HTML5 e os passos iniciais para criar uma aplicação, como a estrutura de pastas, o arquivo HTML, CSS e JavaScript.
Este documento apresenta um roteiro sobre programação funcional. Ele discute linguagens de programação, funções matemáticas, programação funcional, vantagens e desvantagens, implementações e comandos básicos da linguagem Haskell.
O documento descreve conceitos de programação concorrente em Java, incluindo:
1) Como usar a palavra-chave "synchronized" para sincronizar o acesso a métodos e blocos de código compartilhados por múltiplas threads.
2) Um exemplo de aplicativo bancário que demonstra o uso de "synchronized" para evitar inconsistências de dados.
3) Como sincronizar o acesso a atributos independentes dentro de uma classe usando objetos separados para cada atributo.
Programação Concorrente - Gerenciamento de Threads - Parte IIFabio Moura Pereira
O documento descreve conceitos de programação concorrente em Java, incluindo: 1) como criar e executar threads daemon; 2) como tratar exceções em threads; 3) como usar variáveis de thread locais para evitar conflitos de acesso a dados compartilhados. Exemplos de código são fornecidos para ilustrar cada tópico.
Este documento apresenta novos recursos gráficos do CSS3 como cores, bordas arredondadas, sombras, gradientes e imagens de plano de fundo. Inclui exemplos de como aplicar essas propriedades CSS3 para dar estilo e personalidade às páginas da web. Também discute ações práticas de implementar esses efeitos em uma aplicação de lista de tarefas.
O documento discute fluxos de entrada e saída (E/S) em Java, incluindo byte streams, streams de caracteres, E/S orientada a linha, buffered streams, E/S a partir da linha de comando, streams de dados e o Console.
O documento discute exceções em Java, incluindo: 1) O que são exceções e como são manipuladas, 2) Os três tipos de exceções - verificadas, erros e runtime, 3) O requisito de captura ou especificação para exceções verificadas.
O documento discute a interface gráfica do usuário (GUI), incluindo sua definição, importância do bom design, benefícios do bom design, histórico da introdução da GUI e evolução da web e do design de telas. Ele também aborda os objetivos do projeto de interface do usuário.
O documento resume os principais tópicos sobre desenvolvimento de sistemas web, incluindo: (1) a diferença entre Internet e Web, como a Web usa a Internet para compartilhar hipertextos; (2) o modelo cliente-servidor e como ele funciona; (3) URLs e como elas localizam recursos na Web.
O documento descreve o Java Swing, um conjunto de ferramentas para criação de interfaces gráficas do usuário em Java. O Swing inclui componentes como botões, rótulos e tabelas, além de suporte a funcionalidades como drag-and-drop, internacionalização e acessibilidade. O documento também discute os diferentes estilos visuais ("look and feels") disponíveis no Swing.
O documento discute recursão em Prolog, apresentando:
1) Uma explicação de como a recursão funciona, com cada chamada à regra criando uma nova cópia com variáveis únicas;
2) Um exemplo detalhado mostrando como escrever um predicado recursivo para encontrar objetos aninhados;
3) Como a recursão é executada passo a passo em diferentes níveis através da unificação de variáveis entre as regras.
Programação Concorrente - Gerenciamento de Threads - Parte IFabio Moura Pereira
O documento descreve conceitos de programação concorrente em Java, incluindo:
1) Como criar e executar threads para realizar tarefas concorrentes;
2) Como recuperar informações sobre o estado e prioridade de threads;
3) Como interromper uma thread durante sua execução.
O documento discute o mercado de jogos eletrônicos, incluindo seu tamanho atual de US$ 75 bilhões, maior do que o mercado de cinema, e tendências de crescimento. Também aborda etapas do desenvolvimento de jogos, como design, implementação e testes, além de ferramentas e linguagens usadas.
O documento discute o processo de game design, definindo-o como a descrição do jogo baseada em suas características finais. Explora as várias fases do game design, incluindo a inicial, tratamento, crítica e especificação detalhada. Também fornece exemplos do game design do jogo Pitfall.
Este documento apresenta os conceitos fundamentais da programação concorrente. Em três frases:
A programação concorrente permite a execução simultânea de várias tarefas computacionais através de múltiplos fluxos de execução. Ela é útil para aproveitar recursos computacionais paralelos e tornar aplicações mais responsivas. No entanto, a concorrência também introduz riscos como corridas, deadlocks e inanição que devem ser evitados.
Este documento discute a abordagem da web analítica orientada à usabilidade. Ela visa monitorar o desempenho e a satisfação dos usuários ao buscarem seus objetivos em um site, ao invés de apenas taxas de conversão. A abordagem infere os objetivos dos usuários e mapeia seu comportamento em áreas produtivas e não produtivas para produzir medidas como eficiência, duração e taxa de incidentes nas transações. Essas medidas são analisadas para identificar causas de flutuações e construir um banco de conhecimento sobre boas e
1) O documento discute programação concorrente e como ela se relaciona com programação orientada a objetos. 2) É apresentado um roteiro para o curso de programação concorrente, abordando concorrência, objetos e concorrência, e padrões de projeto. 3) Construtores de execução concorrente como threads, processos e tarefas são comparados considerando autonomia, compartilhamento, agendamento e comunicação.
O documento discute interfaces de usuário e estilos de interação. Aborda conceitos como interface, usabilidade, comunicabilidade e perspectivas em Interação Homem-Computador. Também descreve estilos de interação como linguagem natural, de comando, menus e preenchimento de formulários.
Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)Fabio Moura Pereira
O documento discute a arquitetura de motores de jogos. Ele aborda como motores de jogos podem reduzir o tempo de desenvolvimento reutilizando componentes entre projetos. Também descreve características de diferentes gêneros de jogos como FPS, corridas e estratégia em tempo real.
O documento discute padrões de projeto de software. Apresenta uma introdução sobre o que são padrões de projeto e sua motivação. Também descreve conceitos básicos como atributos, problemas resolvidos e tipos de padrões.
Este documento fornece um resumo sobre arrays no PHP. Ele discute arrays indexados versus associativos, como identificar e armazenar elementos em arrays, arrays multidimensionais, extrair múltiplos valores, percorrer e ordenar arrays.
Este documento discute a evolução dos jogos eletrônicos desde os anos 1950 até os dias atuais, destacando marcos importantes como o lançamento dos primeiros arcades e consoles e o crescimento da indústria. Ele também descreve as principais características e tipos de jogos, incluindo ações, estratégias e RPGs.
O documento fornece um resumo sobre funções no PHP. Ele discute como definir funções, chamá-las, passar parâmetros, escopo de variáveis, retornar valores e outros aspectos importantes sobre funções no PHP.
Este documento fornece uma introdução ao curso de PHP, abordando sua instalação, configuração e conceitos básicos como estrutura léxica, tipos de dados, variáveis e instruções de controle de fluxo.
O documento descreve os principais tópicos sobre strings em PHP, incluindo: 1) uso de aspas em constantes string; 2) impressão de strings; 3) acesso a caracteres individuais de strings. Ele discute funções como trim(), printf() e var_dump().
A linguagem C# aproveita conceitos de muitas outras linguagens,
mas especialmente de C++ e Java. Sua sintaxe é relativamente fácil, o que
diminui o tempo de aprendizado. Todos os programas desenvolvidos devem
ser compilados, gerando um arquivo com a extensão DLL ou EXE. Isso torna a
execução dos programas mais rápida se comparados com as linguagens de
script (VBScript , JavaScript) que atualmente utilizamos na internet
As classes de modelagem podem ser comparadas a moldes ou
formas que definem as características e os comportamentos dos
objetos criados a partir delas. Vale traçar um paralelo com o projeto de
um automóvel. Os engenheiros definem as medidas, a quantidade de
portas, a potência do motor, a localização do estepe, dentre outras
descrições necessárias para a fabricação de um veículo
1. Programação em LógicaProgramação em Lógica
MatemáticaMatemática
PrologProlog
– 05 –– 05 –
Inteligência ArtificialInteligência Artificial
Fábio M. PereiraFábio M. Pereira
Baseado emBaseado em
Amzi! inc. – www.amzi.comAmzi! inc. – www.amzi.com
3. Aritmética (1)Aritmética (1)
► Prolog deve possuir a habilidade de lidar comProlog deve possuir a habilidade de lidar com
aritmética para se tornar uma linguagem dearitmética para se tornar uma linguagem de
programação de uso geralprogramação de uso geral
No entanto, aritmética não se encaixa naturalmente aoNo entanto, aritmética não se encaixa naturalmente ao
esquema lógicoesquema lógico
O conceito de avaliação de uma expressão aritméticaO conceito de avaliação de uma expressão aritmética
contrasta com o de casamento de padrõescontrasta com o de casamento de padrões
► Por este motivo, Prolog fornece o predicado internoPor este motivo, Prolog fornece o predicado interno
‘‘isis’ que avalia uma expressão aritmética’ que avalia uma expressão aritmética
Sintaxe:Sintaxe:
X is <expressão aritmética>X is <expressão aritmética>
4. Aritmética (2)Aritmética (2)
► Exemplos:Exemplos:
?-?- X is 2 + 2.X is 2 + 2.
X = 4X = 4
?-?- X is 3 * 4 + 2.X is 3 * 4 + 2.
X = 14X = 14
► Operadores para comparação:Operadores para comparação:
XX >> YY XX << YY XX >=>= YY XX =<=< YY
Exemplos:Exemplos:
?-?- 4 > 3.4 > 3. ?-?- 4 < 3.4 < 3. ?-?- X is 2 + 2, X > 3.X is 2 + 2, X > 3.
YesYes NoNo X = 4X = 4
?-?- X is 2 + 2, 3 >= X.X is 2 + 2, 3 >= X. ?-?- 3 + 4 > 3 * 2.3 + 4 > 3 * 2.
NoNo YesYes
5. Aritmética e PredicadosAritmética e Predicados
► Operadores também podem ser usados em regrasOperadores também podem ser usados em regras
► Conversão de Celsius para Fahrenheit:Conversão de Celsius para Fahrenheit:
c_to_f(C, F):- F is C * 9 / 5 + 32.c_to_f(C, F):- F is C * 9 / 5 + 32.
► Temperatura abaixo do ponto de congelamento:Temperatura abaixo do ponto de congelamento:
freezing(F):- F =< 32.freezing(F):- F =< 32.
► Exemplos:Exemplos:
?-?- c_to_f(100,X).c_to_f(100,X).
X = 212X = 212
?-?- freezing(15).freezing(15).
YesYes
?-?- freezing(45).freezing(45).
NoNo
6. Gerenciando Dados (1)Gerenciando Dados (1)
►Vimos que um programa Prolog é um bancoVimos que um programa Prolog é um banco
de dados de predicadosde dados de predicados
►Prolog nos permite manipular o banco deProlog nos permite manipular o banco de
dados diretamente e fornece predicadosdados diretamente e fornece predicados
internos para realizar esta funçãointernos para realizar esta função
asserta(X)asserta(X)
►Adiciona a cláusula X comoAdiciona a cláusula X como primeira cláusulaprimeira cláusula para opara o
seu predicado. Como os outros predicados I/O,seu predicado. Como os outros predicados I/O,
sempre falha em backtracking e não desfaz o seusempre falha em backtracking e não desfaz o seu
trabalhotrabalho
7. Gerenciando Dados (2)Gerenciando Dados (2)
►Predicados internos para manipular o BDPredicados internos para manipular o BD
assertz(X)assertz(X)
►O mesmo que asserta/1, mas adiciona a cláusula XO mesmo que asserta/1, mas adiciona a cláusula X
comocomo última cláusulaúltima cláusula do predicadodo predicado
assert(X)assert(X)
►Sinônimo de assertz/1Sinônimo de assertz/1
retract(X)retract(X)
►Remove a cláusula X do banco de dadosRemove a cláusula X do banco de dados
dynamicdynamic
►Informa ao Prolog que as definições do(s) predicado(s)Informa ao Prolog que as definições do(s) predicado(s)
podem mudar durante a execuçãopodem mudar durante a execução
:- dynamic:- dynamic
foo/0, baz/2.foo/0, baz/2.
8. Nani Search (1)Nani Search (1)
► Precisamos manipular o banco de dados em NaniPrecisamos manipular o banco de dados em Nani
SearchSearch
Para mudar dinamicamente a localização do jogadorPara mudar dinamicamente a localização do jogador
Para mudar as coisas que tenham sidoPara mudar as coisas que tenham sido seguradasseguradas ee
movidasmovidas
► vaipara/1 move o jogador de uma sala para outravaipara/1 move o jogador de uma sala para outra
Desenvolvimento top/downDesenvolvimento top/down
► Primeiro deveremos checar se o jogador pode ir para o lugarPrimeiro deveremos checar se o jogador pode ir para o lugar
► Se puder, devemos movê-lo e olhar em volta no novo lugarSe puder, devemos movê-lo e olhar em volta no novo lugar
vaipara(Lugar):- pode_ir(Lugar), move(Lugar), olhar.vaipara(Lugar):- pode_ir(Lugar), move(Lugar), olhar.
► Podemos ir para uma sala se ela está conectada com a sala ondePodemos ir para uma sala se ela está conectada com a sala onde
estamosestamos
pode_ir(Lugar):- aqui(X), conexao(X, Lugar).pode_ir(Lugar):- aqui(X), conexao(X, Lugar).
9. Nani Search (2)Nani Search (2)
► Podemos testar pode_ir/1 imediatamente (assumindo quePodemos testar pode_ir/1 imediatamente (assumindo que
estamos na cozinha):estamos na cozinha):
?-?- pode_ir(escritório).pode_ir(escritório).
YesYes
?-?- pode_ir(saguão).pode_ir(saguão).
NoNo
► Seria melhor se pode_ir/1 nos desse uma mensagem emSeria melhor se pode_ir/1 nos desse uma mensagem em
caso de falhacaso de falha
pode_ir(Lugar):- aqui(X), conexao(X, Lugar).pode_ir(Lugar):- aqui(X), conexao(X, Lugar).
pode_ir(_):-pode_ir(_):-
write(‘Você não pode ir para lá a partir daqui.’), nl, fail.write(‘Você não pode ir para lá a partir daqui.’), nl, fail.
► Testando ...Testando ...
?-?- pode_ir(saguão).pode_ir(saguão).
Você não pode ir para lá a partir daqui.Você não pode ir para lá a partir daqui.
NoNo
10. Nani Search (3)Nani Search (3)
► Agora podemos desenvolverAgora podemos desenvolver move/1move/1
Atualiza o banco de dados dinamicamente para refletir aAtualiza o banco de dados dinamicamente para refletir a
nova localização do jogadornova localização do jogador
Remove a cláusula aqui/1 e a substitui por uma novaRemove a cláusula aqui/1 e a substitui por uma nova
cláusula de maneira que sempre exista apenas umacláusula de maneira que sempre exista apenas uma
cláusula aqui/1, representando a posição atual do jogadorcláusula aqui/1, representando a posição atual do jogador
Uma vez que vaipara/1 chama pode_ir/1 antes de aqui/1,Uma vez que vaipara/1 chama pode_ir/1 antes de aqui/1,
o novo aqui/1 será sempre um lugar legal no jogoo novo aqui/1 será sempre um lugar legal no jogo
move(Lugar):- retract(aqui(_)), asserta(aqui(Lugar)).move(Lugar):- retract(aqui(_)), asserta(aqui(Lugar)).
► Mas antes devemos informar a Prolog que iremosMas antes devemos informar a Prolog que iremos
manipular aqui/1 em tempo de execuçãomanipular aqui/1 em tempo de execução
:- dynamic:- dynamic
aqui/1.aqui/1.
11. Nani Search (4)Nani Search (4)
► Testando ...Testando ...
?-?- vaipara(escritório).vaipara(escritório).
Você está no(a) escritórioVocê está no(a) escritório
Você pode ver:Você pode ver:
escrivaninhaescrivaninha
computadorcomputador
Você pode ir para:Você pode ir para:
saguãosaguão
cozinhacozinha
?-?- vaipara(saguão).vaipara(saguão).
Você está no(a) saguãoVocê está no(a) saguão
Você pode ver:Você pode ver:
Você pode ir para:Você pode ir para:
sala de jantarsala de jantar
escritórioescritório
YesYes
12. Nani Search (5)Nani Search (5)
► A seguir implementaremos os comandos ‘A seguir implementaremos os comandos ‘pegarpegar’ e’ e
‘‘deixardeixar’’
pegar/1 define um novo predicadopegar/1 define um novo predicado carrega/1carrega/1 com umacom uma
cláusula para cada objeto que o jogador possuicláusula para cada objeto que o jogador possui
Inicialmente carrega/1 não está definido porque o jogadorInicialmente carrega/1 não está definido porque o jogador
não carrega nadanão carrega nada
pegar(X):- pode_pegar(X), pegar_objeto(X).pegar(X):- pode_pegar(X), pegar_objeto(X).
pode_pegar/1 é análoga a pode_ir/1pode_pegar/1 é análoga a pode_ir/1
pode_pegar(Objeto):- aqui(Lugar), local(Objeto, Lugar).pode_pegar(Objeto):- aqui(Lugar), local(Objeto, Lugar).
pode_pegar(Objeto):-pode_pegar(Objeto):-
write(‘Não há nenhum(a) ’), write(Objeto), write(‘ aqui.’),write(‘Não há nenhum(a) ’), write(Objeto), write(‘ aqui.’),
nl, fail.nl, fail.
13. Nani Search (6)Nani Search (6)
►Implementando os comandos ‘Implementando os comandos ‘pegarpegar’ e’ e
‘‘deixardeixar’’
pegar_objeto/1 é análoga a move/1pegar_objeto/1 é análoga a move/1
►Remove uma cláusula de localização do objetoRemove uma cláusula de localização do objeto
(local/2) e inclui uma cláusula carrega/1, refletindo a(local/2) e inclui uma cláusula carrega/1, refletindo a
movimentação do objeto do lugar para o jogadormovimentação do objeto do lugar para o jogador
pegar_objeto(X):-pegar_objeto(X):-
retract(local(X,_)),retract(local(X,_)),
asserta(carrega(X)),asserta(carrega(X)),
write(‘ok’), nl.write(‘ok’), nl.
14. Exercícios (1)Exercícios (1)
►Nani SearchNani Search
Escreva a cláusulaEscreva a cláusula deixar/1deixar/1 que remove aque remove a
cláusula carrega/1 e adiciona a cláusula local/2cláusula carrega/1 e adiciona a cláusula local/2
na sala atualna sala atual
EscrevaEscreva inventario/0inventario/0, que lista os objetos que o, que lista os objetos que o
jogador carregajogador carrega
Utilize vaipara/1, pegar/1, deixar/1, olhar/0 eUtilize vaipara/1, pegar/1, deixar/1, olhar/0 e
inventario/0 para se mover ao redor e examinar oinventario/0 para se mover ao redor e examinar o
ambiente do jogoambiente do jogo
Escreva os predicadosEscreva os predicados liga/1liga/1 ee desliga/1desliga/1 queque
devem ser usados para ligar e desligar a lanternadevem ser usados para ligar e desligar a lanterna
15. O que vem a seguir?O que vem a seguir?
►RecursãoRecursão
►Estruturas de DadosEstruturas de Dados
►......