Paradigmas de Linguagens de Programação Faculdade Nova Roma Cursos de Ciências da Computação (6 Período) Prof. Adriano Avelar - Site: www.adrianoavelar.com Email: edson.avelar@yahoo.com.br
PROGRAMAÇÃO LÓGICA
Na última aula vimos.. Lógica Proposicional Lógica de Predicados Lógica de 1 Ordem Cláusulas de HORN Introdução ao Prolog fatos regras consultas.
Árvore genealógica Relação progenitor.
Passos Passo 1: Definir fatos Maria é do sexo feminino, João é progenitor de José etc. "José é o progenitor de Íris? "Quem é progenitor de quem? "Quem são os avós de Jorge? Quem é progenitor de Jorge? (Por exemplo, Y) e Quem é progenitor de Y? (Por exemplo, X)» progenitor(x,jorge),progenitor(y,x) "Quem é neto de João? progenitor(joao,x),progenitor(x,y).
Passos Passo 2: Definir Regras Relação avô: X,Y,W [ avo(x,y) sexo(x,masculino) progenitor(w,y) progenitor(x,w)] Relação filho: "Para todo X e Y, se X é progenitor de Y, então Y é filho de X". Relação mãe: A mãe de alguém é uma mulher progenitora desse alguém. Relação irmã
Construções recursivas Relação antepassado. Para todo X e Z, X é antepassado de Z se X é progenitor de Z.
Construções recursivas Antepassados diretos antepassado(x, Z) :-progenitor(x, Z). Antepassados Indiretos antepassado(x, Z) :- progenitor(x, Y), progenitor(y, Z). antepassado(x, Z) :- progenitor(x, Y1), progenitor(y1, Y2), progenitor(y2, Z). antepassado(x, Z) :- progenitor(x, Y1), progenitor(y1, Y2), progenitor(y2, Y3), progenitor(y3, Z).... etc.
Construções recursivas Usando recursividade Para todo X e Z X é antepassado de Z se existe um Y tal que X é progenitor de Y e Y é antepassado de Z. Caso Base Passo Recursivo antepassado(y,z) :- progenitor(y,z). antepassado(x,z) :- progenitor(x,y),antepassado(y,z).
Aritmética em Prolog ( 2,5 )+ 2+5 é representado internamente como Ativação das funções por meio do predicado is: X is <expressão aritmética>, onde X é uma variável Calcula a expressão e instancia a variável X com o resultado
Aritmética em Prolog? - X is 1+3.? - X is 4*3+10/2.? - X is abs((15-30)//2).? - X is 10^2. Outros operadores: X+Y X-Y X*Y X/Y ( inteira X//Y (divisão ( exponenciação ) X^Y -X X mod Y
Aritmética em Prolog Qual a raiz quadrada de 144?? - X is sqrt(144).? - sqrt(144,x). Outros operadores: ( abs(x ( exp(x ( ln(x ( log(x ( sin(x ( cos(x ( sqrt(x
Operadores Relacionais? - 2+1 < 6-2.? - 7-3 > 4+2.? - 1+2 =:= 2+1? - 1+2 = 2+1? - 1+2 =:= X.
Comparação de Termos Verificação de termos idênticos: predicado == Sintaxe: Termo1 == Termo2 Retorna sucesso se os termos Termo1 e Termo2 são idênticos:?- nome == nome.?- X == X.?- X == 5
Comparação de Termos Verificação de termos não idênticos: predicado \== Sintaxe: Termo1 \== Termo2 Retorna sucesso se os termos Termo1 e Termo2 não são idênticos:?- nome \== nome..?- X \== Y.
Exercício Crie uma base de dados Prolog, que representa um calculadora. A base deve conter as seguintes regras: soma substracao multiplicacao quociente calculartudo Dada dois número calcula todas as operações acima. Executar com trace habilitado.
Entrada e Saida Obter um número do usuário e verificar se o número está compreendido entre 10 e 100. main :- write('digite um número.\n'), read(n),n > 10,N < 100. Pede ao usuário um número N e imprime na * símboloovezesntela
GUI :- use_module(library(pce)). alo_mundo :- % criacao da janela new(d, window('minha primeira janela')), % redefine o tamanho da janela send(d, size, size(250, 100)), % cria um texto na janela new(t, text('hello World!')), % mostra o texto na posicao desejada send(d, display, T, point(80, 40)), % mostra a janela send(d, open).
GUI :- use_module(library(pce)). ask_name(name) :- new(d, dialog('register')), send(d, append(new(nameitem, text_item(name)))), send(d, append(new(nameitem, text_item(name)))), send(d, append(button(ok, message(d, return, NameItem?selection)))), send(d, append(button(cancel, message(d, return, @nil)))), send(d, default_button(ok)), get(d, confirm, Rval), free(d), Rval \== @nil, Name = Rval.
GUI Usando o exemplo anterior pegue o nome do usuário e imprima. Seja Bem vindo ao sistema Sr(a). NomeDoUsuário.
Trabalho Final 70% da P2. Explicar uma linguagem de programação. História da linguagem Quem criou? porquê criou? Paradigmas que ela segue Sintaxe e Semântica Mercado Comparando brevemente com outras linguagens. Apresentar um programa feito nessa linguagem. Apresentação oral com slides. Duração de 15 a 20 minutos. Data: 02/12 (Todos apresentarão na mesma data)
Trabalho Final 1 - Objective-C 2 - Ruby 3 - Erlang 4 - C# 5 - ActionScript 6 - Perl 7 - Haskell 8 - LUA 9 - JavaScript 10- ShellScript 1 - Edson 2 - Valter 3 - Matheus 4 - Otavio 5 - Irenildo 6 - Duanny 7 - Geraldo 8 - Elton 9 - Peter 10-