87
Paradigmas de Programação Prof: Sergio Souza Costa

Paradigmas de programação

Embed Size (px)

Citation preview

Page 1: Paradigmas de programação

Paradigmas de Programação

Prof: Sergio Souza Costa

Page 2: Paradigmas de programação

Sobre mim

Sérgio Souza CostaProfessor - UFMADoutor em Computação Aplicada (INPE)

[email protected]

http://profsergiocosta.org/

https://twitter.com/profsergiocosta

http://gplus.to/sergiosouzacosta

http://www.slideshare.net/skosta/presentations?order=popular

Page 3: Paradigmas de programação

Introdução

Linguística

Sintaxe, semântica e pragmática

Por quê estudar linguagens ?

Paradigmas de Programação

Procedural

Orientado a objetos

Funcional

Lógico

Page 4: Paradigmas de programação

Linguística

Lingüística é o ESTUDO de linguagens.

Page 5: Paradigmas de programação

Lingüística

Lingüística é o ESTUDO de linguagens.

Neste caso, linguagens de PROGRAMAÇÃO

Page 6: Paradigmas de programação

Lingüística

Lingüística é o ESTUDO de linguagens.

Neste caso, linguagens de PROGRAMAÇÃO

De forma análoga, linguagens naturais e de programação possuem sintaxe (forma) e semântica (significado ).

Page 7: Paradigmas de programação

Lingüística

Lingüística é o ESTUDO de linguagens.

Neste caso, linguagens de PROGRAMAÇÃO

De forma análoga, linguagens naturais e de programação possuem sintaxe (forma) e semântica (significado ).

Sendo a primeira mais expressiva e a segunda mais LIMITADA.

Page 8: Paradigmas de programação

Lingüística

Lingüística é o ESTUDO de linguagens.

Neste caso, linguagens de PROGRAMAÇÃO

De forma análoga, linguagens naturais e de programação possuem sintaxe (forma) e semântica (significado ).

Sendo a primeira mais expressiva e a segunda mais LIMITADA.

Como falado anteriormente, o estudo pode diminuir algumas limitações

Page 9: Paradigmas de programação

Propriedades das linguagens

Ser UNIVERSAL

devem suportar recursão ou iteração

Page 10: Paradigmas de programação

Propriedades das linguagens

Ser UNIVERSAL

devem suportar recursão ou iteração

Ser o mais NATURAL possívelpara a área que foi proposta

Page 11: Paradigmas de programação

Propriedades das linguagens

Ser UNIVERSAL

devem suportar recursão ou iteração

Ser o mais NATURAL possívelpara a área que foi proposta

Ser IMPLEMENTÁVEL

Page 12: Paradigmas de programação

Propriedades das linguagens

Ser UNIVERSAL

devem suportar recursão ou iteração

Ser o mais NATURAL possívelpara a área que foi proposta

Ser IMPLEMENTÁVEL

Ser EFICIENTE

Page 13: Paradigmas de programação

Conceitos

Conceitos (building blocks) das linguagens de programação● Valores e tipos● Variáveis e armazenamento● Amarramento e escopo● Abstração de processos● Abstração de dados● Programação genérica● Concorrência

Page 14: Paradigmas de programação

Sintaxe, semântica e Pragmática

A tarefa de descrever qualquer linguagem (natural ou artificial), precisa considerar três elementos principais:

● Sintaxe: quais as sentenças e quais as sequências são validas em uma linguagem.○ Normalmente é separado em léxico (identifica os

elementos básicos) e sintático (identifica as sequências, como estes elementos podem ser agrupados).

● Semântica: qual o significado de uma da expressão ?

● Pragmática: como determinada linguagem é usada na prática.

Page 15: Paradigmas de programação

Sintaxe, semântica e Pragmática

A tarefa de descrever qualquer linguagem (natural ou artificial), precisa considerar três elementos principais:

● Sintaxe: quais as sentenças e quais as sequências são validas em uma linguagem.○ Normalmente é separado em léxico (identifica os

elementos básicos) e sintático (identifica as sequências, como estes elementos podem ser agrupados).

● Semântica: qual o significado de uma da expressão ?

● Pragmática: como determinada linguagem é usada na prática.

Conceitualmente léxico faz parte da sintaxe.

Page 16: Paradigmas de programação

A sintaxe influencia como os programas são escritos pelos programadores, lidos por outros programadore e pelo compilador.

Semântica determina como os programas são compostos pelo programador , entendido por outros programadores e interpretado pelo computador.

Pragmatismo influencia como os programadores projeta e implementa um dado problema na prática, como ele usa os elementos da linguagem.

Sintaxe, semântica e Pragmática

Page 17: Paradigmas de programação

Por que estudar linguagens de programação ?

Page 18: Paradigmas de programação

Considerem as seguintes descrições de linguagens de programação:

Page 19: Paradigmas de programação

JavaScript is a prototype-based, object-oriented scripting language that is dynamic, weakly typed and has first-class functions. It is also considered a functional programming language like Scheme and OCaml because it has closures and supports higher-order functions.

Fonte: Wikipedia, 2011

Page 20: Paradigmas de programação

Python supports multiple programming paradigms, primarily but not limited to object-oriented, imperative and, to a lesser extent, functional programming styles. It features a fully dynamic type system and automatic memory management, similar to that of Scheme, Ruby, Perl, and Tcl. Like other dynamic languages, Python is often used as a scripting language, but is also used in a wide range of non-scripting contexts.Fonte: Wikipedia, 2011

Page 21: Paradigmas de programação

Ruby is a dynamic, reflective,general-purpose object-oriented programming language that combines syntax inspired by Perl with Smalltalk-like features. Ruby originated in Japan during the mid-1990s and was first developed and designed by Yukihiro "Matz" Matsumoto. It was influenced primarily by Perl, Smalltalk, Eiffel, and Lisp.

Ruby supports multiple programming paradigms, including functional, object oriented, imperative and reflective. It also has a dynamic type system and automatic memory management; it is therefore similar in varying respects to Python, Perl, Lisp, Dylan, Pike, and CLU.

Fonte: Wikipedia, 2011

Page 22: Paradigmas de programação

Por que estudar linguagens de programação?

“The magic of computer programming doesn’t come from using any particular tool, computer, or language. The real magic of programming comes from applying your own imagination and using programming as a means to achieve whatever you want to create.”

Wallace WangBeginning Programming for Dummies, 4th

Edition

“O aspecto mais importante, mas também o mais elusivo, de qualquer ferramenta é a sua influência nos hábitos daqueles que se treinam no seu uso. Se a ferramenta é uma linguagem de programação essa influência é, gostemos ou não, uma influência em nosso hábito de pensar”

Edsger W. Dijkstra

Page 23: Paradigmas de programação

Por que estudar linguagens de programação?

● Os principais benefícios no estudo de LPs são os seguintes:○ Melhoria na capacidade de expressar idéias○ Melhoria na capacidade de escolher linguagens

apropriadas○ Mais habilidade para aprender novas linguagens○ Melhor entendimento da dificuldade de implementação

das construções das LPs○ Melhor uso das linguagens conhecidas○ Avanço da área de computação de um modo geral

Page 24: Paradigmas de programação

Melhoria na capacidade de expressar idéias

Existe uma relação entre os pensamentos e a linguagem utilizada

para comunicar esses pensamentos.

É difícil para as pessoas conceitualizarem estruturas que elas não

podem descrever verbalmente ou na forma escrita

● Particularmente em termos das abstrações que podem

manipular

Page 25: Paradigmas de programação

Melhoria na capacidade de expressar idéias

Programadores também sofrem restrições durante o desenvolvimento de software

A linguagem que eles utilizam limitam os tipos de estruturas de controle, estruturas de dados e abstrações que podem ser usadas.

O conhecimento de uma variedade mais ampla de características de LPs pode reduzir tais limitações

Page 26: Paradigmas de programação

Melhoria na capacidade de escolher LPs apropriadas

Muitos programadores possuem pouca educação formal nas LPs que trabalham

Muitas vezes as linguagens que aprenderam não são mais usadas e muitas características de novas LPs não existiam na época ● Ex.: De Pascal, COBOL, C para Delphi, C++, Java,

LPs p/ Web

Page 27: Paradigmas de programação

Melhoria na capacidade de escolher LPs apropriadas

● Desta forma muitas pessoas escolhem sempre a mesma linguagem para a resolução de problemas, o que não é uma boa estratégia○ O conhecimento de uma variedade mais ampla de LPs e

construções de outras LPs pode ajudar na seleção da linguagem mais apropriada para o problema em mãos.

● Mesmo que algumas das novas construções possam ser simuladas, nem sempre tais soluções são boas...○ Ex.: Classes em C

Page 28: Paradigmas de programação

Mais habilidade para aprender novas

linguagens

A CC é uma área relativamente nova e as metodologias de

desenvolvimento, ferramentas e LPs estão em constante

evolução.

○ http://www.tiobe.com/tiobe_index

Uma linguagem muito utilizada hoje, amanhã pode ficar no

esquecimento.

Especializar em uma só linguagem , pode não lhe garantir um

emprego.

Page 29: Paradigmas de programação

Tiobe Index

Page 30: Paradigmas de programação

Mais habilidade para aprender novas

linguagens

O processo de aprender uma nova LP normalmente é difícil e

demorado

Aprender os principais conceitos de LPs ajuda a aprender novas

linguagens.

Ex.: Programadores que conhecem os conceitos OO terão

mais facilidade para aprender Java ou C++

Page 31: Paradigmas de programação

Mais habilidade para aprender novas linguagens

O mesmo ocorre com linguagens naturais

Quanto melhor você conhece a gramática de sua língua nativa,

mais fácil será para você aprender uma segunda língua.

Adicionalmente, aprender uma segunda língua ensina a vc mais

coisas sobre a primeira.

Page 32: Paradigmas de programação

Melhor entendimento da dificuldade de

implementação das LPs

Ao projetar e usar LPs é interessante saber como as construções são

implementadas

Isso pode ajudar a selecionar as construções mais eficientes para cada

caso.

Não é o foco dessa disciplina discutir profundamente a

implementação das construções de LPs

Esse é o foco da cadeira de Compiladores

Page 33: Paradigmas de programação

Melhor uso das linguagens conhecidas

Muitas das LPs atuais são grandes e complexas

É incomum um programador conhecer e usar todas as

características de uma LP

O estudo de CLPs pode ajudar a aprender conceitos

previamente desconhecidos e não usados da LP usada pelo

programador.

Page 34: Paradigmas de programação

Paradigmas de programação

Paradigmas, ou categorias, é um modo de classificar

as linguagens de programação

Page 35: Paradigmas de programação

Qual a principal operação realizada nos seus programas ?

Page 36: Paradigmas de programação

É possível programar sem essa operação ?

Page 37: Paradigmas de programação

Conhecem alguma linguagem de programação onde não exista esta operação?

Page 38: Paradigmas de programação

Considerem o seguinte algoritmo

x = 2 x = x + 1

E agora, continua válido para qualquer paradigma?

Page 39: Paradigmas de programação
Page 40: Paradigmas de programação

● De acordo com execução○ Seqüencial e○ Concorrente

● De acordo com a programação○ Imperativo e○ Declarativo

Paradigmas de programação

Page 41: Paradigmas de programação

SEQÜÊNCIAL E CONCORRENTE

Seqüencial

● Uma computação é realizada

após o término da anterior

● Controle de fluxo de execução

interno ao programa:

○ seqüência

○ seleção

○ iteração

○ invocações

Concorrente

● Múltiplas computações podem

ser executadas

simultaneamente

● Computações paralelas

○ múltiplos processadores

compartilham memória

● Computações distribuídas

○ múltiplos computadores

conectados por uma rede

de comunicação

Page 42: Paradigmas de programação

IMPERATIVO DECLARATIVO

PROCEDURALORIENTADO A

OBJETOSFUNCTIONAL LÓGICO

Modelo, padrão ou estilo de programação suportado por linguagens que agrupam certas características comuns

Paradigmas de programação

Page 43: Paradigmas de programação

IMPERATIVO E DECLARATIVO

Modelo imperativo

● Linguagens expressam

seqüências de comandos que

realizam transformações sobre

dados

● Base: máquina de von

Neumann

○ orientadas a procedimentos

○ orientadas a objetos

Modelo declarativo

● Linguagens que não possuem

os conceitos de

○ seqüências de comandos

○ atribuição

● linguagens funcionais: ênfase

em valores computados por

funções

● linguagens lógicas: ênfase em

axiomas lógicos

Page 44: Paradigmas de programação

PARADIGMAS DE PROGRAMAÇÃO

● Percentual de uso de acordo com o Tiobe index.

Page 45: Paradigmas de programação

PARADIGMA IMPERATIVO

Page 46: Paradigmas de programação

Uma simples expressão em C ...

x = x + 1;

identificador

atribuição

Qual é o

valor de X ?

PARADIGMA IMPERATIVO

expressão

Page 47: Paradigmas de programação

● Baseado fortemente na maquina de Turing e na arquitetura de Von

Neuman (1947):

○ memória;

○ processador;

○ dispositivos de entrada e saída.

● Primeiro paradigma a surgir e até hoje é o dominante.

PARADIGMA IMPERATIVO

Page 48: Paradigmas de programação

● Um programa neste paradigma é uma seqüência finita de instruções (ou comandos) de três tipos: atribuição, controle de fluxo, ou entrada/saída de dados.

● Comandos de atribuição alteram o “estado” do programa.

PARADIGMA IMPERATIVO

Page 49: Paradigmas de programação

int fatorial( int n ){ int fat = 1; while ( n > 1) { fat = fat * n; n = n - 1; } return fat;}

PARADIGMA IMPERATIVO

Page 50: Paradigmas de programação

SEMÂNTICA DA EXECUÇÃO

● A semântica da execução de um programa imperativo consiste numa seqüência de estado de memória, onde cada estado é obtido do anterior por uma operação de atribuição.

● A seqüência de estados é determinística, no sentido de que não há escolha possível de caminhos alternativos.

● O estado de um programa em determinado momento é o conteúdo da sua memória neste momento e pela instrução corrente.

Page 51: Paradigmas de programação

Vantagens?

● Eficiência

● Paradigma dominante e bem estabelecido

● Método “receita de bolo”

Desvantagens?

● difícil legibilidade

● descrições demasiadamente operacionais

● focalizam o como e não o quê

O que vocês acham?

PARADIGMA IMPERATIVO

Page 52: Paradigmas de programação

Paradigma procedural emprega o conceito de funções e procedimentos:

PARADIGMA IMPERATIVO - PROCEDURAL

Procedimentos são coleções de sentenças que definem computações parametrizáveis- Podem modificar os parâmetros- Podem modificar variáveis globais

Funções são similares a procedimentos, mas são semanticamente modeladas como funções matemáticas- Não deveriam ter efeitos colaterais- Na prática, são intercambiáveis...

Page 53: Paradigmas de programação

PROCEDIMENTOS PARA OBJETOS: TAD

Tipos Abstratos de Dados (TAD)

-Conceito matemático que diz respeito a determinada

entidade e às funções aplicadas sobre ela

-Um TAD é definido pela sua funcionalidade: “o que” se pode fazer com ele, e não “como” ele está de fato implementado

-Exemplo uma fila é um tipo abstrato de dados: pode-se inserir e retirar elementos de uma fila, verificar se a fila está cheia ou vazia, ou ainda contar quantos elementos estão nesta fila

-A utilização da fila (por uma aplicação) através destas funções independe de como a fila está de fato implementada

John Guttag, grande contribuição na formalização dos TAD.

J.V. Guttag, The Specification and Application to Programming of Abstract Data Types,Ph.D. Thesis, Dept. of Computer Science, University of Toronto (1975).

Page 54: Paradigmas de programação

PROGRAMAÇÃO MODULAR

● A programação modular implementa a noção de tipo abstrato de dados

● Implementação: encapsulamento de dados e funções na mesma unidade sintática – o módulo

● A principal estrutura é um módulo, constituído de uma interface e de uma implementação

● A interface contém todos os elementos visíveis (importáveis) por outros módulos

● A implementação contém os elementos que devem ficar invisíveis e as implementações das funções e procedimentos do módulo

● Exemplos de linguagens: Ada (DoD-USA), Modula-2 (Nicklaus Wirth).

Page 55: Paradigmas de programação

Outros exemplos:

● Pilha

○ operações: pop, push, top

● Conta bancária

○ operações: depositar, retirar, tirar extrato, verificar saldo

● Agenda

○ operações: inserir, remover, alterar

● Figura

○ operações: desenhar, mover, rotacionar, colorir

PROGRAMAÇÃO MODULAR

Page 56: Paradigmas de programação

Orientação a objetos

● Evolução da programação modular, incorporando duas

características fundamentais: herança e polimorfismo

● TAD → Módulo → Classes de Objetos

○ Classes são estruturas que agrupam características (atributos) e

funcionalidades (métodos) comuns a um grupo de objetos

○ Uma variável de uma classe é denominada atributo, e uma

função é denominada método

● Não existe um estado global do sistema: todas as variáveis e funções

são locais aos objetos, que se comunicam entre si através de troca

de mensagens (chamada de procedimentos/funções)

Page 57: Paradigmas de programação

Orientação a objetos

Page 58: Paradigmas de programação

Um sistema é um conjunto de objetos e suas

relações.

Orientação a objetos

Page 59: Paradigmas de programação

● Não é um paradigma no sentido estrito: é uma

subclassificacão do imperativo

● A diferença é mais de metodologia quanto à concepção e

modelagem do sistema

● A grosso modo, uma aplicação é estruturada em módulos

(classes) que agrupam um estado (atributos) e operações

(métodos) sobre este

● Classes podem ser estendidas e/ou usadas como tipos (cujos

elementos são objetos)

Orientação a objetos

Page 60: Paradigmas de programação

● A classe é uma estrutura de onde se deriva vários

objetos.

● Os objetos são as entidade criadas a partir de

uma classe.

● Um objeto é uma “instância” de uma classe.

● Classes existem na modelagem enquanto os

objetos em execução.

● A composição é um poderoso mecanismo de

extensão.

Orientação a objetos: Conceitos chaves

Page 61: Paradigmas de programação

PROGRAMAÇÃO FUNCIONAL

Page 62: Paradigmas de programação

PROGRAMAÇÃO FUNCIONAL

● Linguagens de programação implementam mapeamentos

● Programação imperativa:

○ Mapeamento através de comandos que lêem valores de

entrada, os manipulam e escrevem valores de saída

○ Variáveis têm papel fundamental

● Em programação funcional:

○ Mapeamento ocorre através de funções

○ Baseado em funções matemáticas

Page 63: Paradigmas de programação

FUNÇÕES MATEMÁTICAS

● Correspondência biunívoca de membros do conjunto domínio

para membros do conjunto imagem

● Ordem de avaliação de suas expressões é controlada por

expressões condicionais e por recursão por expressões

condicionais e por recursão.

○ Não pela seqüência ou pela repetição iterativa

● Não têm efeitos colaterais

○ Sempre definem o mesmo valor dado o mesmo conjunto

de argumentos, diferentemente de um procedimento em

linguagens imperativas.

Page 64: Paradigmas de programação

● Definição de função

○ Nome + lista de parâmetros + expressão de correspondência

○ cubo (x) = x * x * x

○ Um elemento do conjunto imagem é obtido para cada par:

Nome da função + um elemento particular do conjunto

domínio

■ cubo (2.0) = 8.0

● Definição de uma função separada da tarefa de nomeá-

la

○ Notação lambda (Church, 1941)

○ λ(x) x * x * x

PROGRAMAÇÃO FUNCIONAL

Page 65: Paradigmas de programação

● Não existem variáveis

○ Expressões

● Não existem comandos

○ Funções

● Não existem efeitos colaterais

○ Declarações

● Não há armazenamento

○ Funções de alta ordem

○ Lazy evaluation

○ Recursão

● Fluxo de controle: expressões condicionais + recursão

PROGRAMAÇÃO FUNCIONAL

Page 66: Paradigmas de programação

FUNÇÕES

Uma função é um mapeamento de valores de um tipo em outro

tipo

not :: Bool -> Bool

isDigit :: Char -> Bool

add :: (Int,Int) -> Int

add x y = x + y

Page 67: Paradigmas de programação

– funções com um argumento-- PIpi = 3.14159

DEFINIÇÕES DE FUNÇÕES

-- area e circunferencia de circulo

circumf r = 2 * pi * r

area rad = pi * rad^2

Page 68: Paradigmas de programação

APLICAÇÃO DE FUNÇÕES EM HASKELL

Matemáticaf (x)f (x,y)f (g(x))f (x, g(y))f (x) g(y)f(a,b) + c d

Haskellf xf x yf (g x)f x (g y)f x * g yf a b + c * d

Page 69: Paradigmas de programação

SOMA DE 1 A 100 EM C++

● Operação baseada em atribuição de variáveis

int total = 0;for (int i = 1; i <= 100; i++)

total = total + i;

● A mesma variável (total) muda de valor 100 vezes durante a operação (efeito colateral)

● Como programar sem efeitos colaterais?

Page 70: Paradigmas de programação

Operação baseada em recursão e casamento de

padrões.

SOMA DE 1 A 100 EM HASKELL

soma [] = 0

soma (x:xs) = x + soma xs

prelude> soma [1..100]

Page 71: Paradigmas de programação

CARACTERÍSTICAS DO HASKELL

● Lazy avaluation, avaliação preguiçosa ou chamada por

nome.

● Funções como valores de primeira classe, ou funções

de alta ordem.

● Funções e tipos paramétricos;

Page 72: Paradigmas de programação

HASKELL – LAZY EVALUATION

● Estratégia call-by-value --- Avalia primeiro o argumento antes de aplicar a função (Pascal, C, Java, etc). (\x -> x+1) (2+3) = (x+1)+ 5 = 5+1 = 6

● Estratégia call-by-name (ou lazy evaluation) --- Aplica imediatamente a função ao argumento, adiando para mais tarde a avaliação desse argumento (Haskell e Miranda)

(\x -> x+1) (2+3) = (2+3)+1 = 5+1 = 6

Page 73: Paradigmas de programação

FUNÇÕES VALORES DE PRIMEIRA CLASSE

● Significa que as funções têm um estatuto tão importante como o

dos inteiros, reais, e outros tipos predefinidos. Concretamente,

numa linguagem funcional as funções podem:

○ Ser passadas como argumento para outras funções;

○ Podem ser retornadas por outras funções;

○ Podem ser usadas como elementos constituintes de estruturas

de dados;

Prelude>map (\x->2*x) [1,2,3]

[2,4,6]

Page 74: Paradigmas de programação

FUNÇÕES E TIPOS PARAMÉTRICOS

● Funções que podem lidar com diversos tipos de dados, por exemplo o map em Haskell:

● Definição map :: (a->b) -> [a] -> [b] map f [] = [] map f (x:xs) = f a : map f as

● Usando com inteiros Prelude>map (\x->2*x) [1,2,3] [2,4,6]

● Usando com strings: Prelude> map (\x->"aa" ++ x ) ["bb","cc","dd"] ["aabb","aacc","aadd"]

Page 75: Paradigmas de programação

PARADIGMA LÓGICO

Page 76: Paradigmas de programação

FATOS, REGRAS E PERGUNTAS

● Um fato é uma afirmação sempre verdadeira.

● Uma regra é uma afirmação que para ser verdadeira depende

de outras regras ou fatos.

● Podemos fazer perguntas sobre os fatos ou regras.

A Terra é um planeta.O Sol é uma estrela.

A Terra é um planeta ?Quem é um planeta ?A Terra é uma estrela ?

A Terra é um planeta se ela não for uma estrela.

Page 77: Paradigmas de programação

PARADIGMA LÓGICO

● Programa-se de forma declarativa, ou seja, especificando o que deve ser computado ao invés de como deve ser computado

● Sem instruções explícitas e seqüenciamento

● Aplicações em IA, robotica, linguagem natural

Page 78: Paradigmas de programação

PARADIGMA LÓGICO

Programar em lógica envolve:

1. declarar alguns fatos a respeito de objetos e seus

relacionamentos,

2. definir algumas regras sobre os objetos e seus relacionamentos

e

3. fazer perguntas sobre os objetos e seus relacionamentos.

Page 79: Paradigmas de programação

LÓGICA E PROLOG

● Prolog = Programming in Logic.

● Principal linguagem do paradigma lógico , proposto na

década de 70.

○ Robert Kowalski (Edinburgh)

○ Maarten van Emden (Edinburgh)

○ Alan Colmerauer (Marseilles)

Page 80: Paradigmas de programação

FATOS EM PROLOG

Fatos

Notação geral de fatos.

predicado(arg1, arg3, ..., argn ).

O Sol é uma estrela.A Terra é um planeta.

estrela(sol).planeta(terra).

Um fato ou regra deve terminar por pontoPredicados e

argumentos são escritos por letras minúsculas

Não pode ter espaço entre predicado e parênteses.

Page 81: Paradigmas de programação

FATOS EM PROLOG

● Exemplos de fatos, com um argumento

● Exemplos de fatos, com mais de um argumento

estrela(sol).planeta(terra).planeta(marte).satelite(lua).

pai(joao, ana).João é pai de Ana.

filho(jose, maria, antonio). José é filho de Maria e Antonio

Verbo Sujeito e Objeto

Page 82: Paradigmas de programação

PERGUNTAS EM PROLOG

Consultas, perguntas, queries ou goals.

A “hipótese do mundo fechado”.

A Terra é um planeta ?A Terra é uma estrela ?O sol é um planeta ? ...

?- planeta(terra).true.?- estrela(terra).false.

% base de dadosplaneta(terra).

% goals?- planeta(marte).false.

Page 83: Paradigmas de programação

PERGUNTAS EM PROLOG

Consultas, perguntas, queries ou goals.

A “hipótese do mundo fechado”.

A Terra é um planeta ?A Terra é uma estrela ?O sol é um planeta ? ...

?- planeta(terra).true.?- estrela(terra).false.

% base de dadosplaneta(terra).

% goals?- planeta(marte).false.

Um predicado sempre retorna um valor lógico, verdadeiro ou falso.

Page 84: Paradigmas de programação

PERGUNTAS EM PROLOG

Consultas, perguntas, queries ou goals.

A “hipótese do mundo fechado”.

A Terra é um planeta ?A Terra é uma estrela ?O sol é um planeta ? ...

?- planeta(terra).true.?- estrela(terra).false.

% base de dadosplaneta(terra).

% goals?- planeta(marte).false.

Um predicado sempre retorna um valor lógico, verdadeiro ou falso.

se um fato não é conhecido , assume-se que ele é falso.

Page 85: Paradigmas de programação

PERGUNTAS EM PROLOG

Consultas, perguntas, queries ou goals.

A Terra é um planeta ?A Terra é uma estrela ?O sol é um planeta ? ...

?- planeta(terra).true.?- estrela(terra).false.

Quem é um

planeta ?

Page 86: Paradigmas de programação

VARIÁVEIS EM PROLOG

Variáveis em Prolog é como uma incógnita que pode ser encontrada por inferência (deduções lógicas) aos fatos e regras:

?- planeta(X).X = terra.

Variável XDedução do

interpretador

Toda variável começa com letra maiúscula

Page 87: Paradigmas de programação

REGRAS OU CLAUSULAS

A Terra é um planeta se ela não for uma estrela.

planeta(terra) :- not(estrela(terra)).

irmao(X,Y) :- filho(X, H,M) , filho(Y,H,M) , Y \== X.

Cabeça,

definição do

predicado

Pescoço,

equivale ao “if“

ou “se”.

Corpo,

equivale a

uma função.

Uma virgula (,) equivale ao

operador “e” e um ponto e

virgula (;) ao operador “ou”.

Pé da sentença (.)