61

Programação em Lógica - inf.ufsc.bralexandre.goncalves.silva/courses/17s2/ine5416/... · imediatas para problemas de programação dinâmica Prof. A. G. Silva (UFSC) Programação

  • Upload
    buiphuc

  • View
    212

  • Download
    0

Embed Size (px)

Citation preview

Programaccedilatildeo em Loacutegica

Prof A G Silva

UFSC

09-novembro-2017

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 1 61

Interface do SWI-Prolog com Java C++ e Python

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 2 61

Interface do SWI-Prolog com Java C++ e Python

Java

I Congure o PATH do sistema operacional incluindoltdiretoacuterio-instalaccedilatildeogtswiplbin

I Utilizar o jpljar da proacutepria distribuiccedilatildeo do SWI-Prolog emltdiretoacuterio-instalaccedilatildeogtswipllib

(documentaccedilatildeo emhttpwwwswi-prologorgpackagesjpljava_api)

I Adicionar JAR externoltdiretoacuterio-instalaccedilatildeogtswipllibjpljar

Para Eclipse por exemplo apoacutes criar o projeto clique em propriedades

e congure

Build Path rarr Congure Build Path rarr LibrariesAdd External JARsltdiretoacuterio-instalaccedilatildeogtswipllibjpljar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 3 61

Interface do SWI-Prolog com Java C++ e Python

C++

I Congure o PATH do sistema operacional incluindoltdiretoacuterio-instalaccedilatildeogtswiplbin

I Utilizar o libswipldlla da proacutepria distribuiccedilatildeo do SWI-Prolog emltdiretoacuterio-instalaccedilatildeogtswipllib

(documentaccedilatildeo em httpwwwswi-prologorgwindowshtml)

I Adicionar Include Directory ao projetoltdiretoacuterio-instalaccedilatildeogtswiplinclude

I Adicionar Library Directory ao projetoltdiretoacuterio-instalaccedilatildeogtswipllib

I Adicionar dependecircncialtdiretoacuterio-instalaccedilatildeogtswiplliblibswipldlla

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 4 61

Interface do SWI-Prolog com Java C++ e Python

Python

I Sugestatildeohttpscodegooglecomppyswip

I Congure o PATH do sistema operacional incluindoltdiretoacuterio-instalaccedilatildeogtswiplbin

I Instalaccedilatildeo no LinuxF Download

pyswip-023targzF Instalaccedilatildeo

tar zxvf pyswip-023targz

cd pyswip-023

sudo python setuppy install

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 5 61

Outras interfaces

Outras linguagens

I httpwwwswi-prologorgcontrib

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 6 61

Exemplo testepl

Sara Abraatildeo

Isaque Ismael

Esauacute Jacoacute

Joseacute

progenitor(saraisaque) progenitor(abraaoisaque)progenitor(abraaoismael)progenitor(isaqueesau)progenitor(isaquejaco)progenitor(jacojose)

mulher(sara)homem(abraao)homem(isaque)homem(ismael)homem(esau)homem(jaco)homem(jose)

filho(YX) - progenitor(XY)mae(XY) - progenitor(XY) mulher(X)avo(XZ) - progenitor(XY) progenitor(YZ)irmao(XY) - progenitor(ZX) progenitor(ZY)ancestral(XZ) - progenitor(XZ)ancestral(XZ) - progenitor(XY) ancestral(YZ)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 7 61

Exemplo em Java

import jpl

import javalangSystem

import javautilHashtable

public class Main

public static void main(String[] args)

Query q1 = new Query(consult new Term[] new Atom(clocaltestepl))

Systemoutprintln(consult + (q1query() succeeded failed))

Query q2 = new Query(ancestral(X jose))

Hashtable[] solution = q2allSolutions()

if (solution = null)

for (int i = 0 i lt solutionlength i++)

Systemoutprintln(X = + solution[i]get(X))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 8 61

Exemplo em Java

Ao executar o exemplo a saiacuteda deve ser

I consult succeeded

testepl compiled 000 sec 20 clauses

X = jaco

X = sara

X = abraao

X = isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 9 61

Exemplo em C++

include ltSWI-cpphgt

include ltiostreamgt

using namespace std

int main()

char argv[] = swipldll -s clocaltestepl NULL

_putenv(SWI_HOME_DIR=cprogram files (x86)swipl)

PlEngine e(3argv)

PlTermv av(2)

av[1] = PlCompound(jose)

PlQuery q(ancestral av)

while (qnext_solution())

cout ltlt (char)av[0] ltlt endl

cinget()

return 1

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 10 61

Exemplo em C++ usando swipl-ld

include ltstdiohgt

include ltSWI-Prologhgt

int main(int argc char argv)

char plav[2] = teste NULL

if ( PL_initialise(1 plav) ) PL_halt(1) inicializacao do Prolog

predicate_t p_anc = PL_predicate(ancestral 2 database)

term_t t = PL_new_term_refs(2)

PL_put_atom_chars(t sara)

PL_put_atom_chars(t+1 jose)

qid_t query = PL_open_query(NULL PL_Q_NORMAL p_anc t)

int result = PL_next_solution(query)

while (result)

char x y

PL_get_atom_chars(t ampx)

PL_get_atom_chars(t+1 ampy)

printf(ancestral encontrado (s s)n x y)

result = PL_next_solution(query)

return 0

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 11 61

Exemplo em C++ usando swipl-ld

A compilaccedilatildeo deve ser feita da seguinte forma

swipl-ld -o teste testecpp testepl

Ao executar o exemplo a saiacuteda deve ser

ancestral encontrado (jaco jose)

ancestral encontrado (sara jose)

ancestral encontrado (abraao jose)

ancestral encontrado (isaque jose)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 12 61

Exemplo em Python

from pyswip import Prolog

prolog = Prolog()

print dir(prolog)

prologconsult(testepl)

solutions = list( prologquery(ancestral(X jose)) )

print solutions

for s in solutions

print s[X]

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 13 61

Exemplo em Python

Ao executar o exemplo a saiacuteda deve ser

[_QueryWrapper __doc__ __module__

asserta assertz consult query]

[X jaco X sara

X abraao X isaque]

jaco

sara

abraao

isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 14 61

Exerciacutecios

1 Escolher uma linguagem com paradigma orientado a objetos (JavaC++ Python ou outra qualquer) e implementar a interface comSWI-Prolog usando o exemplo (testepl)

2 Estudar bibliotecas na linguagem escolhida para interaccedilotildees por meiode interface graacuteca

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 15 61

Picat uma linguagem de programaccedilatildeo em loacutegica e multiparadigma

Baseado no material de Claudio Cesar de Saacute Rogeacuterio Eduardo da Silva

Joatildeo Herique Faes Battisti e Paulo Victor de Aguiar

httpsgithubcomclaudiosaCCStreemasterpicat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 16 61

Histoacuterico

Criada em 2013 por Neng-Fa Zhou e Jonathan Fruhman

Utiliza B-Prolog como base de implementaccedilatildeo e ambas utilizam aprogramaccedilatildeo em loacutegica (Loacutegica de Primeira Ordem)

Uma evoluccedilatildeo do Prolog apoacutes mais de 40 anos

Sua atual versatildeo eacute a 21 (6 de novembro de 2017)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 17 61

O que eacute multiparadigma

Imperativo procedural

Funcional

Loacutegico

Uma boa mistura de Haskell Prolog e Python

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 18 61

Algumas caracteriacutesticas

Sintaxe elegante

Velocidade de execuccedilatildeo

Portabilidade

Extensatildeo

Ferramentas

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 19 61

Anacrocircnico de PICAT

P Pattern-matching utiliza o conceito de casamento depadrotildees (semelhante agrave unicaccedilatildeo)

I Intuitive oferece estruturas de decisatildeo atribuiccedilatildeo e laccedilos derepeticcedilatildeo anaacutelogo a outras linguagens de programaccedilatildeo

C Constraints suporta agrave programaccedilatildeo por restriccedilotildees

A Actors suporte a eventos (a ser implementado)

T Tabling implementa a teacutecnica de memoization com soluccedilotildeesimediatas para problemas de programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 20 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 21 61

Instalaccedilatildeo do Picat

Baixar a versatildeo desejada dehttppicat-langorgdownloadhtml

Descompactar Por exemplo em usrlocalPicat

Criar um link simboacutelico (Linux) ou atalhos (Windows)ln -s usrlocalPicatpicat usrbinpicat

Se quiser adicionar (opcional) uma variaacutevel de ambientePICATPATH=usrlocalPicat

export PICATPATH

Ou ainda adicione o caminhoPATH=$PATHusrlocalPicat

Finalmente tenha um editor de coacutedigo de programaSugestatildeo geany ou sublime

Escolha uma sintaxe padratildeo (sugestatildeo Erlang)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 22 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Interface do SWI-Prolog com Java C++ e Python

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 2 61

Interface do SWI-Prolog com Java C++ e Python

Java

I Congure o PATH do sistema operacional incluindoltdiretoacuterio-instalaccedilatildeogtswiplbin

I Utilizar o jpljar da proacutepria distribuiccedilatildeo do SWI-Prolog emltdiretoacuterio-instalaccedilatildeogtswipllib

(documentaccedilatildeo emhttpwwwswi-prologorgpackagesjpljava_api)

I Adicionar JAR externoltdiretoacuterio-instalaccedilatildeogtswipllibjpljar

Para Eclipse por exemplo apoacutes criar o projeto clique em propriedades

e congure

Build Path rarr Congure Build Path rarr LibrariesAdd External JARsltdiretoacuterio-instalaccedilatildeogtswipllibjpljar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 3 61

Interface do SWI-Prolog com Java C++ e Python

C++

I Congure o PATH do sistema operacional incluindoltdiretoacuterio-instalaccedilatildeogtswiplbin

I Utilizar o libswipldlla da proacutepria distribuiccedilatildeo do SWI-Prolog emltdiretoacuterio-instalaccedilatildeogtswipllib

(documentaccedilatildeo em httpwwwswi-prologorgwindowshtml)

I Adicionar Include Directory ao projetoltdiretoacuterio-instalaccedilatildeogtswiplinclude

I Adicionar Library Directory ao projetoltdiretoacuterio-instalaccedilatildeogtswipllib

I Adicionar dependecircncialtdiretoacuterio-instalaccedilatildeogtswiplliblibswipldlla

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 4 61

Interface do SWI-Prolog com Java C++ e Python

Python

I Sugestatildeohttpscodegooglecomppyswip

I Congure o PATH do sistema operacional incluindoltdiretoacuterio-instalaccedilatildeogtswiplbin

I Instalaccedilatildeo no LinuxF Download

pyswip-023targzF Instalaccedilatildeo

tar zxvf pyswip-023targz

cd pyswip-023

sudo python setuppy install

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 5 61

Outras interfaces

Outras linguagens

I httpwwwswi-prologorgcontrib

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 6 61

Exemplo testepl

Sara Abraatildeo

Isaque Ismael

Esauacute Jacoacute

Joseacute

progenitor(saraisaque) progenitor(abraaoisaque)progenitor(abraaoismael)progenitor(isaqueesau)progenitor(isaquejaco)progenitor(jacojose)

mulher(sara)homem(abraao)homem(isaque)homem(ismael)homem(esau)homem(jaco)homem(jose)

filho(YX) - progenitor(XY)mae(XY) - progenitor(XY) mulher(X)avo(XZ) - progenitor(XY) progenitor(YZ)irmao(XY) - progenitor(ZX) progenitor(ZY)ancestral(XZ) - progenitor(XZ)ancestral(XZ) - progenitor(XY) ancestral(YZ)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 7 61

Exemplo em Java

import jpl

import javalangSystem

import javautilHashtable

public class Main

public static void main(String[] args)

Query q1 = new Query(consult new Term[] new Atom(clocaltestepl))

Systemoutprintln(consult + (q1query() succeeded failed))

Query q2 = new Query(ancestral(X jose))

Hashtable[] solution = q2allSolutions()

if (solution = null)

for (int i = 0 i lt solutionlength i++)

Systemoutprintln(X = + solution[i]get(X))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 8 61

Exemplo em Java

Ao executar o exemplo a saiacuteda deve ser

I consult succeeded

testepl compiled 000 sec 20 clauses

X = jaco

X = sara

X = abraao

X = isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 9 61

Exemplo em C++

include ltSWI-cpphgt

include ltiostreamgt

using namespace std

int main()

char argv[] = swipldll -s clocaltestepl NULL

_putenv(SWI_HOME_DIR=cprogram files (x86)swipl)

PlEngine e(3argv)

PlTermv av(2)

av[1] = PlCompound(jose)

PlQuery q(ancestral av)

while (qnext_solution())

cout ltlt (char)av[0] ltlt endl

cinget()

return 1

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 10 61

Exemplo em C++ usando swipl-ld

include ltstdiohgt

include ltSWI-Prologhgt

int main(int argc char argv)

char plav[2] = teste NULL

if ( PL_initialise(1 plav) ) PL_halt(1) inicializacao do Prolog

predicate_t p_anc = PL_predicate(ancestral 2 database)

term_t t = PL_new_term_refs(2)

PL_put_atom_chars(t sara)

PL_put_atom_chars(t+1 jose)

qid_t query = PL_open_query(NULL PL_Q_NORMAL p_anc t)

int result = PL_next_solution(query)

while (result)

char x y

PL_get_atom_chars(t ampx)

PL_get_atom_chars(t+1 ampy)

printf(ancestral encontrado (s s)n x y)

result = PL_next_solution(query)

return 0

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 11 61

Exemplo em C++ usando swipl-ld

A compilaccedilatildeo deve ser feita da seguinte forma

swipl-ld -o teste testecpp testepl

Ao executar o exemplo a saiacuteda deve ser

ancestral encontrado (jaco jose)

ancestral encontrado (sara jose)

ancestral encontrado (abraao jose)

ancestral encontrado (isaque jose)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 12 61

Exemplo em Python

from pyswip import Prolog

prolog = Prolog()

print dir(prolog)

prologconsult(testepl)

solutions = list( prologquery(ancestral(X jose)) )

print solutions

for s in solutions

print s[X]

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 13 61

Exemplo em Python

Ao executar o exemplo a saiacuteda deve ser

[_QueryWrapper __doc__ __module__

asserta assertz consult query]

[X jaco X sara

X abraao X isaque]

jaco

sara

abraao

isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 14 61

Exerciacutecios

1 Escolher uma linguagem com paradigma orientado a objetos (JavaC++ Python ou outra qualquer) e implementar a interface comSWI-Prolog usando o exemplo (testepl)

2 Estudar bibliotecas na linguagem escolhida para interaccedilotildees por meiode interface graacuteca

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 15 61

Picat uma linguagem de programaccedilatildeo em loacutegica e multiparadigma

Baseado no material de Claudio Cesar de Saacute Rogeacuterio Eduardo da Silva

Joatildeo Herique Faes Battisti e Paulo Victor de Aguiar

httpsgithubcomclaudiosaCCStreemasterpicat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 16 61

Histoacuterico

Criada em 2013 por Neng-Fa Zhou e Jonathan Fruhman

Utiliza B-Prolog como base de implementaccedilatildeo e ambas utilizam aprogramaccedilatildeo em loacutegica (Loacutegica de Primeira Ordem)

Uma evoluccedilatildeo do Prolog apoacutes mais de 40 anos

Sua atual versatildeo eacute a 21 (6 de novembro de 2017)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 17 61

O que eacute multiparadigma

Imperativo procedural

Funcional

Loacutegico

Uma boa mistura de Haskell Prolog e Python

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 18 61

Algumas caracteriacutesticas

Sintaxe elegante

Velocidade de execuccedilatildeo

Portabilidade

Extensatildeo

Ferramentas

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 19 61

Anacrocircnico de PICAT

P Pattern-matching utiliza o conceito de casamento depadrotildees (semelhante agrave unicaccedilatildeo)

I Intuitive oferece estruturas de decisatildeo atribuiccedilatildeo e laccedilos derepeticcedilatildeo anaacutelogo a outras linguagens de programaccedilatildeo

C Constraints suporta agrave programaccedilatildeo por restriccedilotildees

A Actors suporte a eventos (a ser implementado)

T Tabling implementa a teacutecnica de memoization com soluccedilotildeesimediatas para problemas de programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 20 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 21 61

Instalaccedilatildeo do Picat

Baixar a versatildeo desejada dehttppicat-langorgdownloadhtml

Descompactar Por exemplo em usrlocalPicat

Criar um link simboacutelico (Linux) ou atalhos (Windows)ln -s usrlocalPicatpicat usrbinpicat

Se quiser adicionar (opcional) uma variaacutevel de ambientePICATPATH=usrlocalPicat

export PICATPATH

Ou ainda adicione o caminhoPATH=$PATHusrlocalPicat

Finalmente tenha um editor de coacutedigo de programaSugestatildeo geany ou sublime

Escolha uma sintaxe padratildeo (sugestatildeo Erlang)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 22 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Interface do SWI-Prolog com Java C++ e Python

Java

I Congure o PATH do sistema operacional incluindoltdiretoacuterio-instalaccedilatildeogtswiplbin

I Utilizar o jpljar da proacutepria distribuiccedilatildeo do SWI-Prolog emltdiretoacuterio-instalaccedilatildeogtswipllib

(documentaccedilatildeo emhttpwwwswi-prologorgpackagesjpljava_api)

I Adicionar JAR externoltdiretoacuterio-instalaccedilatildeogtswipllibjpljar

Para Eclipse por exemplo apoacutes criar o projeto clique em propriedades

e congure

Build Path rarr Congure Build Path rarr LibrariesAdd External JARsltdiretoacuterio-instalaccedilatildeogtswipllibjpljar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 3 61

Interface do SWI-Prolog com Java C++ e Python

C++

I Congure o PATH do sistema operacional incluindoltdiretoacuterio-instalaccedilatildeogtswiplbin

I Utilizar o libswipldlla da proacutepria distribuiccedilatildeo do SWI-Prolog emltdiretoacuterio-instalaccedilatildeogtswipllib

(documentaccedilatildeo em httpwwwswi-prologorgwindowshtml)

I Adicionar Include Directory ao projetoltdiretoacuterio-instalaccedilatildeogtswiplinclude

I Adicionar Library Directory ao projetoltdiretoacuterio-instalaccedilatildeogtswipllib

I Adicionar dependecircncialtdiretoacuterio-instalaccedilatildeogtswiplliblibswipldlla

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 4 61

Interface do SWI-Prolog com Java C++ e Python

Python

I Sugestatildeohttpscodegooglecomppyswip

I Congure o PATH do sistema operacional incluindoltdiretoacuterio-instalaccedilatildeogtswiplbin

I Instalaccedilatildeo no LinuxF Download

pyswip-023targzF Instalaccedilatildeo

tar zxvf pyswip-023targz

cd pyswip-023

sudo python setuppy install

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 5 61

Outras interfaces

Outras linguagens

I httpwwwswi-prologorgcontrib

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 6 61

Exemplo testepl

Sara Abraatildeo

Isaque Ismael

Esauacute Jacoacute

Joseacute

progenitor(saraisaque) progenitor(abraaoisaque)progenitor(abraaoismael)progenitor(isaqueesau)progenitor(isaquejaco)progenitor(jacojose)

mulher(sara)homem(abraao)homem(isaque)homem(ismael)homem(esau)homem(jaco)homem(jose)

filho(YX) - progenitor(XY)mae(XY) - progenitor(XY) mulher(X)avo(XZ) - progenitor(XY) progenitor(YZ)irmao(XY) - progenitor(ZX) progenitor(ZY)ancestral(XZ) - progenitor(XZ)ancestral(XZ) - progenitor(XY) ancestral(YZ)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 7 61

Exemplo em Java

import jpl

import javalangSystem

import javautilHashtable

public class Main

public static void main(String[] args)

Query q1 = new Query(consult new Term[] new Atom(clocaltestepl))

Systemoutprintln(consult + (q1query() succeeded failed))

Query q2 = new Query(ancestral(X jose))

Hashtable[] solution = q2allSolutions()

if (solution = null)

for (int i = 0 i lt solutionlength i++)

Systemoutprintln(X = + solution[i]get(X))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 8 61

Exemplo em Java

Ao executar o exemplo a saiacuteda deve ser

I consult succeeded

testepl compiled 000 sec 20 clauses

X = jaco

X = sara

X = abraao

X = isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 9 61

Exemplo em C++

include ltSWI-cpphgt

include ltiostreamgt

using namespace std

int main()

char argv[] = swipldll -s clocaltestepl NULL

_putenv(SWI_HOME_DIR=cprogram files (x86)swipl)

PlEngine e(3argv)

PlTermv av(2)

av[1] = PlCompound(jose)

PlQuery q(ancestral av)

while (qnext_solution())

cout ltlt (char)av[0] ltlt endl

cinget()

return 1

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 10 61

Exemplo em C++ usando swipl-ld

include ltstdiohgt

include ltSWI-Prologhgt

int main(int argc char argv)

char plav[2] = teste NULL

if ( PL_initialise(1 plav) ) PL_halt(1) inicializacao do Prolog

predicate_t p_anc = PL_predicate(ancestral 2 database)

term_t t = PL_new_term_refs(2)

PL_put_atom_chars(t sara)

PL_put_atom_chars(t+1 jose)

qid_t query = PL_open_query(NULL PL_Q_NORMAL p_anc t)

int result = PL_next_solution(query)

while (result)

char x y

PL_get_atom_chars(t ampx)

PL_get_atom_chars(t+1 ampy)

printf(ancestral encontrado (s s)n x y)

result = PL_next_solution(query)

return 0

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 11 61

Exemplo em C++ usando swipl-ld

A compilaccedilatildeo deve ser feita da seguinte forma

swipl-ld -o teste testecpp testepl

Ao executar o exemplo a saiacuteda deve ser

ancestral encontrado (jaco jose)

ancestral encontrado (sara jose)

ancestral encontrado (abraao jose)

ancestral encontrado (isaque jose)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 12 61

Exemplo em Python

from pyswip import Prolog

prolog = Prolog()

print dir(prolog)

prologconsult(testepl)

solutions = list( prologquery(ancestral(X jose)) )

print solutions

for s in solutions

print s[X]

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 13 61

Exemplo em Python

Ao executar o exemplo a saiacuteda deve ser

[_QueryWrapper __doc__ __module__

asserta assertz consult query]

[X jaco X sara

X abraao X isaque]

jaco

sara

abraao

isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 14 61

Exerciacutecios

1 Escolher uma linguagem com paradigma orientado a objetos (JavaC++ Python ou outra qualquer) e implementar a interface comSWI-Prolog usando o exemplo (testepl)

2 Estudar bibliotecas na linguagem escolhida para interaccedilotildees por meiode interface graacuteca

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 15 61

Picat uma linguagem de programaccedilatildeo em loacutegica e multiparadigma

Baseado no material de Claudio Cesar de Saacute Rogeacuterio Eduardo da Silva

Joatildeo Herique Faes Battisti e Paulo Victor de Aguiar

httpsgithubcomclaudiosaCCStreemasterpicat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 16 61

Histoacuterico

Criada em 2013 por Neng-Fa Zhou e Jonathan Fruhman

Utiliza B-Prolog como base de implementaccedilatildeo e ambas utilizam aprogramaccedilatildeo em loacutegica (Loacutegica de Primeira Ordem)

Uma evoluccedilatildeo do Prolog apoacutes mais de 40 anos

Sua atual versatildeo eacute a 21 (6 de novembro de 2017)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 17 61

O que eacute multiparadigma

Imperativo procedural

Funcional

Loacutegico

Uma boa mistura de Haskell Prolog e Python

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 18 61

Algumas caracteriacutesticas

Sintaxe elegante

Velocidade de execuccedilatildeo

Portabilidade

Extensatildeo

Ferramentas

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 19 61

Anacrocircnico de PICAT

P Pattern-matching utiliza o conceito de casamento depadrotildees (semelhante agrave unicaccedilatildeo)

I Intuitive oferece estruturas de decisatildeo atribuiccedilatildeo e laccedilos derepeticcedilatildeo anaacutelogo a outras linguagens de programaccedilatildeo

C Constraints suporta agrave programaccedilatildeo por restriccedilotildees

A Actors suporte a eventos (a ser implementado)

T Tabling implementa a teacutecnica de memoization com soluccedilotildeesimediatas para problemas de programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 20 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 21 61

Instalaccedilatildeo do Picat

Baixar a versatildeo desejada dehttppicat-langorgdownloadhtml

Descompactar Por exemplo em usrlocalPicat

Criar um link simboacutelico (Linux) ou atalhos (Windows)ln -s usrlocalPicatpicat usrbinpicat

Se quiser adicionar (opcional) uma variaacutevel de ambientePICATPATH=usrlocalPicat

export PICATPATH

Ou ainda adicione o caminhoPATH=$PATHusrlocalPicat

Finalmente tenha um editor de coacutedigo de programaSugestatildeo geany ou sublime

Escolha uma sintaxe padratildeo (sugestatildeo Erlang)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 22 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Interface do SWI-Prolog com Java C++ e Python

C++

I Congure o PATH do sistema operacional incluindoltdiretoacuterio-instalaccedilatildeogtswiplbin

I Utilizar o libswipldlla da proacutepria distribuiccedilatildeo do SWI-Prolog emltdiretoacuterio-instalaccedilatildeogtswipllib

(documentaccedilatildeo em httpwwwswi-prologorgwindowshtml)

I Adicionar Include Directory ao projetoltdiretoacuterio-instalaccedilatildeogtswiplinclude

I Adicionar Library Directory ao projetoltdiretoacuterio-instalaccedilatildeogtswipllib

I Adicionar dependecircncialtdiretoacuterio-instalaccedilatildeogtswiplliblibswipldlla

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 4 61

Interface do SWI-Prolog com Java C++ e Python

Python

I Sugestatildeohttpscodegooglecomppyswip

I Congure o PATH do sistema operacional incluindoltdiretoacuterio-instalaccedilatildeogtswiplbin

I Instalaccedilatildeo no LinuxF Download

pyswip-023targzF Instalaccedilatildeo

tar zxvf pyswip-023targz

cd pyswip-023

sudo python setuppy install

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 5 61

Outras interfaces

Outras linguagens

I httpwwwswi-prologorgcontrib

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 6 61

Exemplo testepl

Sara Abraatildeo

Isaque Ismael

Esauacute Jacoacute

Joseacute

progenitor(saraisaque) progenitor(abraaoisaque)progenitor(abraaoismael)progenitor(isaqueesau)progenitor(isaquejaco)progenitor(jacojose)

mulher(sara)homem(abraao)homem(isaque)homem(ismael)homem(esau)homem(jaco)homem(jose)

filho(YX) - progenitor(XY)mae(XY) - progenitor(XY) mulher(X)avo(XZ) - progenitor(XY) progenitor(YZ)irmao(XY) - progenitor(ZX) progenitor(ZY)ancestral(XZ) - progenitor(XZ)ancestral(XZ) - progenitor(XY) ancestral(YZ)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 7 61

Exemplo em Java

import jpl

import javalangSystem

import javautilHashtable

public class Main

public static void main(String[] args)

Query q1 = new Query(consult new Term[] new Atom(clocaltestepl))

Systemoutprintln(consult + (q1query() succeeded failed))

Query q2 = new Query(ancestral(X jose))

Hashtable[] solution = q2allSolutions()

if (solution = null)

for (int i = 0 i lt solutionlength i++)

Systemoutprintln(X = + solution[i]get(X))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 8 61

Exemplo em Java

Ao executar o exemplo a saiacuteda deve ser

I consult succeeded

testepl compiled 000 sec 20 clauses

X = jaco

X = sara

X = abraao

X = isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 9 61

Exemplo em C++

include ltSWI-cpphgt

include ltiostreamgt

using namespace std

int main()

char argv[] = swipldll -s clocaltestepl NULL

_putenv(SWI_HOME_DIR=cprogram files (x86)swipl)

PlEngine e(3argv)

PlTermv av(2)

av[1] = PlCompound(jose)

PlQuery q(ancestral av)

while (qnext_solution())

cout ltlt (char)av[0] ltlt endl

cinget()

return 1

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 10 61

Exemplo em C++ usando swipl-ld

include ltstdiohgt

include ltSWI-Prologhgt

int main(int argc char argv)

char plav[2] = teste NULL

if ( PL_initialise(1 plav) ) PL_halt(1) inicializacao do Prolog

predicate_t p_anc = PL_predicate(ancestral 2 database)

term_t t = PL_new_term_refs(2)

PL_put_atom_chars(t sara)

PL_put_atom_chars(t+1 jose)

qid_t query = PL_open_query(NULL PL_Q_NORMAL p_anc t)

int result = PL_next_solution(query)

while (result)

char x y

PL_get_atom_chars(t ampx)

PL_get_atom_chars(t+1 ampy)

printf(ancestral encontrado (s s)n x y)

result = PL_next_solution(query)

return 0

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 11 61

Exemplo em C++ usando swipl-ld

A compilaccedilatildeo deve ser feita da seguinte forma

swipl-ld -o teste testecpp testepl

Ao executar o exemplo a saiacuteda deve ser

ancestral encontrado (jaco jose)

ancestral encontrado (sara jose)

ancestral encontrado (abraao jose)

ancestral encontrado (isaque jose)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 12 61

Exemplo em Python

from pyswip import Prolog

prolog = Prolog()

print dir(prolog)

prologconsult(testepl)

solutions = list( prologquery(ancestral(X jose)) )

print solutions

for s in solutions

print s[X]

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 13 61

Exemplo em Python

Ao executar o exemplo a saiacuteda deve ser

[_QueryWrapper __doc__ __module__

asserta assertz consult query]

[X jaco X sara

X abraao X isaque]

jaco

sara

abraao

isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 14 61

Exerciacutecios

1 Escolher uma linguagem com paradigma orientado a objetos (JavaC++ Python ou outra qualquer) e implementar a interface comSWI-Prolog usando o exemplo (testepl)

2 Estudar bibliotecas na linguagem escolhida para interaccedilotildees por meiode interface graacuteca

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 15 61

Picat uma linguagem de programaccedilatildeo em loacutegica e multiparadigma

Baseado no material de Claudio Cesar de Saacute Rogeacuterio Eduardo da Silva

Joatildeo Herique Faes Battisti e Paulo Victor de Aguiar

httpsgithubcomclaudiosaCCStreemasterpicat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 16 61

Histoacuterico

Criada em 2013 por Neng-Fa Zhou e Jonathan Fruhman

Utiliza B-Prolog como base de implementaccedilatildeo e ambas utilizam aprogramaccedilatildeo em loacutegica (Loacutegica de Primeira Ordem)

Uma evoluccedilatildeo do Prolog apoacutes mais de 40 anos

Sua atual versatildeo eacute a 21 (6 de novembro de 2017)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 17 61

O que eacute multiparadigma

Imperativo procedural

Funcional

Loacutegico

Uma boa mistura de Haskell Prolog e Python

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 18 61

Algumas caracteriacutesticas

Sintaxe elegante

Velocidade de execuccedilatildeo

Portabilidade

Extensatildeo

Ferramentas

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 19 61

Anacrocircnico de PICAT

P Pattern-matching utiliza o conceito de casamento depadrotildees (semelhante agrave unicaccedilatildeo)

I Intuitive oferece estruturas de decisatildeo atribuiccedilatildeo e laccedilos derepeticcedilatildeo anaacutelogo a outras linguagens de programaccedilatildeo

C Constraints suporta agrave programaccedilatildeo por restriccedilotildees

A Actors suporte a eventos (a ser implementado)

T Tabling implementa a teacutecnica de memoization com soluccedilotildeesimediatas para problemas de programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 20 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 21 61

Instalaccedilatildeo do Picat

Baixar a versatildeo desejada dehttppicat-langorgdownloadhtml

Descompactar Por exemplo em usrlocalPicat

Criar um link simboacutelico (Linux) ou atalhos (Windows)ln -s usrlocalPicatpicat usrbinpicat

Se quiser adicionar (opcional) uma variaacutevel de ambientePICATPATH=usrlocalPicat

export PICATPATH

Ou ainda adicione o caminhoPATH=$PATHusrlocalPicat

Finalmente tenha um editor de coacutedigo de programaSugestatildeo geany ou sublime

Escolha uma sintaxe padratildeo (sugestatildeo Erlang)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 22 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Interface do SWI-Prolog com Java C++ e Python

Python

I Sugestatildeohttpscodegooglecomppyswip

I Congure o PATH do sistema operacional incluindoltdiretoacuterio-instalaccedilatildeogtswiplbin

I Instalaccedilatildeo no LinuxF Download

pyswip-023targzF Instalaccedilatildeo

tar zxvf pyswip-023targz

cd pyswip-023

sudo python setuppy install

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 5 61

Outras interfaces

Outras linguagens

I httpwwwswi-prologorgcontrib

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 6 61

Exemplo testepl

Sara Abraatildeo

Isaque Ismael

Esauacute Jacoacute

Joseacute

progenitor(saraisaque) progenitor(abraaoisaque)progenitor(abraaoismael)progenitor(isaqueesau)progenitor(isaquejaco)progenitor(jacojose)

mulher(sara)homem(abraao)homem(isaque)homem(ismael)homem(esau)homem(jaco)homem(jose)

filho(YX) - progenitor(XY)mae(XY) - progenitor(XY) mulher(X)avo(XZ) - progenitor(XY) progenitor(YZ)irmao(XY) - progenitor(ZX) progenitor(ZY)ancestral(XZ) - progenitor(XZ)ancestral(XZ) - progenitor(XY) ancestral(YZ)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 7 61

Exemplo em Java

import jpl

import javalangSystem

import javautilHashtable

public class Main

public static void main(String[] args)

Query q1 = new Query(consult new Term[] new Atom(clocaltestepl))

Systemoutprintln(consult + (q1query() succeeded failed))

Query q2 = new Query(ancestral(X jose))

Hashtable[] solution = q2allSolutions()

if (solution = null)

for (int i = 0 i lt solutionlength i++)

Systemoutprintln(X = + solution[i]get(X))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 8 61

Exemplo em Java

Ao executar o exemplo a saiacuteda deve ser

I consult succeeded

testepl compiled 000 sec 20 clauses

X = jaco

X = sara

X = abraao

X = isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 9 61

Exemplo em C++

include ltSWI-cpphgt

include ltiostreamgt

using namespace std

int main()

char argv[] = swipldll -s clocaltestepl NULL

_putenv(SWI_HOME_DIR=cprogram files (x86)swipl)

PlEngine e(3argv)

PlTermv av(2)

av[1] = PlCompound(jose)

PlQuery q(ancestral av)

while (qnext_solution())

cout ltlt (char)av[0] ltlt endl

cinget()

return 1

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 10 61

Exemplo em C++ usando swipl-ld

include ltstdiohgt

include ltSWI-Prologhgt

int main(int argc char argv)

char plav[2] = teste NULL

if ( PL_initialise(1 plav) ) PL_halt(1) inicializacao do Prolog

predicate_t p_anc = PL_predicate(ancestral 2 database)

term_t t = PL_new_term_refs(2)

PL_put_atom_chars(t sara)

PL_put_atom_chars(t+1 jose)

qid_t query = PL_open_query(NULL PL_Q_NORMAL p_anc t)

int result = PL_next_solution(query)

while (result)

char x y

PL_get_atom_chars(t ampx)

PL_get_atom_chars(t+1 ampy)

printf(ancestral encontrado (s s)n x y)

result = PL_next_solution(query)

return 0

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 11 61

Exemplo em C++ usando swipl-ld

A compilaccedilatildeo deve ser feita da seguinte forma

swipl-ld -o teste testecpp testepl

Ao executar o exemplo a saiacuteda deve ser

ancestral encontrado (jaco jose)

ancestral encontrado (sara jose)

ancestral encontrado (abraao jose)

ancestral encontrado (isaque jose)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 12 61

Exemplo em Python

from pyswip import Prolog

prolog = Prolog()

print dir(prolog)

prologconsult(testepl)

solutions = list( prologquery(ancestral(X jose)) )

print solutions

for s in solutions

print s[X]

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 13 61

Exemplo em Python

Ao executar o exemplo a saiacuteda deve ser

[_QueryWrapper __doc__ __module__

asserta assertz consult query]

[X jaco X sara

X abraao X isaque]

jaco

sara

abraao

isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 14 61

Exerciacutecios

1 Escolher uma linguagem com paradigma orientado a objetos (JavaC++ Python ou outra qualquer) e implementar a interface comSWI-Prolog usando o exemplo (testepl)

2 Estudar bibliotecas na linguagem escolhida para interaccedilotildees por meiode interface graacuteca

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 15 61

Picat uma linguagem de programaccedilatildeo em loacutegica e multiparadigma

Baseado no material de Claudio Cesar de Saacute Rogeacuterio Eduardo da Silva

Joatildeo Herique Faes Battisti e Paulo Victor de Aguiar

httpsgithubcomclaudiosaCCStreemasterpicat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 16 61

Histoacuterico

Criada em 2013 por Neng-Fa Zhou e Jonathan Fruhman

Utiliza B-Prolog como base de implementaccedilatildeo e ambas utilizam aprogramaccedilatildeo em loacutegica (Loacutegica de Primeira Ordem)

Uma evoluccedilatildeo do Prolog apoacutes mais de 40 anos

Sua atual versatildeo eacute a 21 (6 de novembro de 2017)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 17 61

O que eacute multiparadigma

Imperativo procedural

Funcional

Loacutegico

Uma boa mistura de Haskell Prolog e Python

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 18 61

Algumas caracteriacutesticas

Sintaxe elegante

Velocidade de execuccedilatildeo

Portabilidade

Extensatildeo

Ferramentas

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 19 61

Anacrocircnico de PICAT

P Pattern-matching utiliza o conceito de casamento depadrotildees (semelhante agrave unicaccedilatildeo)

I Intuitive oferece estruturas de decisatildeo atribuiccedilatildeo e laccedilos derepeticcedilatildeo anaacutelogo a outras linguagens de programaccedilatildeo

C Constraints suporta agrave programaccedilatildeo por restriccedilotildees

A Actors suporte a eventos (a ser implementado)

T Tabling implementa a teacutecnica de memoization com soluccedilotildeesimediatas para problemas de programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 20 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 21 61

Instalaccedilatildeo do Picat

Baixar a versatildeo desejada dehttppicat-langorgdownloadhtml

Descompactar Por exemplo em usrlocalPicat

Criar um link simboacutelico (Linux) ou atalhos (Windows)ln -s usrlocalPicatpicat usrbinpicat

Se quiser adicionar (opcional) uma variaacutevel de ambientePICATPATH=usrlocalPicat

export PICATPATH

Ou ainda adicione o caminhoPATH=$PATHusrlocalPicat

Finalmente tenha um editor de coacutedigo de programaSugestatildeo geany ou sublime

Escolha uma sintaxe padratildeo (sugestatildeo Erlang)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 22 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Outras interfaces

Outras linguagens

I httpwwwswi-prologorgcontrib

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 6 61

Exemplo testepl

Sara Abraatildeo

Isaque Ismael

Esauacute Jacoacute

Joseacute

progenitor(saraisaque) progenitor(abraaoisaque)progenitor(abraaoismael)progenitor(isaqueesau)progenitor(isaquejaco)progenitor(jacojose)

mulher(sara)homem(abraao)homem(isaque)homem(ismael)homem(esau)homem(jaco)homem(jose)

filho(YX) - progenitor(XY)mae(XY) - progenitor(XY) mulher(X)avo(XZ) - progenitor(XY) progenitor(YZ)irmao(XY) - progenitor(ZX) progenitor(ZY)ancestral(XZ) - progenitor(XZ)ancestral(XZ) - progenitor(XY) ancestral(YZ)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 7 61

Exemplo em Java

import jpl

import javalangSystem

import javautilHashtable

public class Main

public static void main(String[] args)

Query q1 = new Query(consult new Term[] new Atom(clocaltestepl))

Systemoutprintln(consult + (q1query() succeeded failed))

Query q2 = new Query(ancestral(X jose))

Hashtable[] solution = q2allSolutions()

if (solution = null)

for (int i = 0 i lt solutionlength i++)

Systemoutprintln(X = + solution[i]get(X))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 8 61

Exemplo em Java

Ao executar o exemplo a saiacuteda deve ser

I consult succeeded

testepl compiled 000 sec 20 clauses

X = jaco

X = sara

X = abraao

X = isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 9 61

Exemplo em C++

include ltSWI-cpphgt

include ltiostreamgt

using namespace std

int main()

char argv[] = swipldll -s clocaltestepl NULL

_putenv(SWI_HOME_DIR=cprogram files (x86)swipl)

PlEngine e(3argv)

PlTermv av(2)

av[1] = PlCompound(jose)

PlQuery q(ancestral av)

while (qnext_solution())

cout ltlt (char)av[0] ltlt endl

cinget()

return 1

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 10 61

Exemplo em C++ usando swipl-ld

include ltstdiohgt

include ltSWI-Prologhgt

int main(int argc char argv)

char plav[2] = teste NULL

if ( PL_initialise(1 plav) ) PL_halt(1) inicializacao do Prolog

predicate_t p_anc = PL_predicate(ancestral 2 database)

term_t t = PL_new_term_refs(2)

PL_put_atom_chars(t sara)

PL_put_atom_chars(t+1 jose)

qid_t query = PL_open_query(NULL PL_Q_NORMAL p_anc t)

int result = PL_next_solution(query)

while (result)

char x y

PL_get_atom_chars(t ampx)

PL_get_atom_chars(t+1 ampy)

printf(ancestral encontrado (s s)n x y)

result = PL_next_solution(query)

return 0

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 11 61

Exemplo em C++ usando swipl-ld

A compilaccedilatildeo deve ser feita da seguinte forma

swipl-ld -o teste testecpp testepl

Ao executar o exemplo a saiacuteda deve ser

ancestral encontrado (jaco jose)

ancestral encontrado (sara jose)

ancestral encontrado (abraao jose)

ancestral encontrado (isaque jose)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 12 61

Exemplo em Python

from pyswip import Prolog

prolog = Prolog()

print dir(prolog)

prologconsult(testepl)

solutions = list( prologquery(ancestral(X jose)) )

print solutions

for s in solutions

print s[X]

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 13 61

Exemplo em Python

Ao executar o exemplo a saiacuteda deve ser

[_QueryWrapper __doc__ __module__

asserta assertz consult query]

[X jaco X sara

X abraao X isaque]

jaco

sara

abraao

isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 14 61

Exerciacutecios

1 Escolher uma linguagem com paradigma orientado a objetos (JavaC++ Python ou outra qualquer) e implementar a interface comSWI-Prolog usando o exemplo (testepl)

2 Estudar bibliotecas na linguagem escolhida para interaccedilotildees por meiode interface graacuteca

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 15 61

Picat uma linguagem de programaccedilatildeo em loacutegica e multiparadigma

Baseado no material de Claudio Cesar de Saacute Rogeacuterio Eduardo da Silva

Joatildeo Herique Faes Battisti e Paulo Victor de Aguiar

httpsgithubcomclaudiosaCCStreemasterpicat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 16 61

Histoacuterico

Criada em 2013 por Neng-Fa Zhou e Jonathan Fruhman

Utiliza B-Prolog como base de implementaccedilatildeo e ambas utilizam aprogramaccedilatildeo em loacutegica (Loacutegica de Primeira Ordem)

Uma evoluccedilatildeo do Prolog apoacutes mais de 40 anos

Sua atual versatildeo eacute a 21 (6 de novembro de 2017)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 17 61

O que eacute multiparadigma

Imperativo procedural

Funcional

Loacutegico

Uma boa mistura de Haskell Prolog e Python

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 18 61

Algumas caracteriacutesticas

Sintaxe elegante

Velocidade de execuccedilatildeo

Portabilidade

Extensatildeo

Ferramentas

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 19 61

Anacrocircnico de PICAT

P Pattern-matching utiliza o conceito de casamento depadrotildees (semelhante agrave unicaccedilatildeo)

I Intuitive oferece estruturas de decisatildeo atribuiccedilatildeo e laccedilos derepeticcedilatildeo anaacutelogo a outras linguagens de programaccedilatildeo

C Constraints suporta agrave programaccedilatildeo por restriccedilotildees

A Actors suporte a eventos (a ser implementado)

T Tabling implementa a teacutecnica de memoization com soluccedilotildeesimediatas para problemas de programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 20 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 21 61

Instalaccedilatildeo do Picat

Baixar a versatildeo desejada dehttppicat-langorgdownloadhtml

Descompactar Por exemplo em usrlocalPicat

Criar um link simboacutelico (Linux) ou atalhos (Windows)ln -s usrlocalPicatpicat usrbinpicat

Se quiser adicionar (opcional) uma variaacutevel de ambientePICATPATH=usrlocalPicat

export PICATPATH

Ou ainda adicione o caminhoPATH=$PATHusrlocalPicat

Finalmente tenha um editor de coacutedigo de programaSugestatildeo geany ou sublime

Escolha uma sintaxe padratildeo (sugestatildeo Erlang)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 22 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Exemplo testepl

Sara Abraatildeo

Isaque Ismael

Esauacute Jacoacute

Joseacute

progenitor(saraisaque) progenitor(abraaoisaque)progenitor(abraaoismael)progenitor(isaqueesau)progenitor(isaquejaco)progenitor(jacojose)

mulher(sara)homem(abraao)homem(isaque)homem(ismael)homem(esau)homem(jaco)homem(jose)

filho(YX) - progenitor(XY)mae(XY) - progenitor(XY) mulher(X)avo(XZ) - progenitor(XY) progenitor(YZ)irmao(XY) - progenitor(ZX) progenitor(ZY)ancestral(XZ) - progenitor(XZ)ancestral(XZ) - progenitor(XY) ancestral(YZ)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 7 61

Exemplo em Java

import jpl

import javalangSystem

import javautilHashtable

public class Main

public static void main(String[] args)

Query q1 = new Query(consult new Term[] new Atom(clocaltestepl))

Systemoutprintln(consult + (q1query() succeeded failed))

Query q2 = new Query(ancestral(X jose))

Hashtable[] solution = q2allSolutions()

if (solution = null)

for (int i = 0 i lt solutionlength i++)

Systemoutprintln(X = + solution[i]get(X))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 8 61

Exemplo em Java

Ao executar o exemplo a saiacuteda deve ser

I consult succeeded

testepl compiled 000 sec 20 clauses

X = jaco

X = sara

X = abraao

X = isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 9 61

Exemplo em C++

include ltSWI-cpphgt

include ltiostreamgt

using namespace std

int main()

char argv[] = swipldll -s clocaltestepl NULL

_putenv(SWI_HOME_DIR=cprogram files (x86)swipl)

PlEngine e(3argv)

PlTermv av(2)

av[1] = PlCompound(jose)

PlQuery q(ancestral av)

while (qnext_solution())

cout ltlt (char)av[0] ltlt endl

cinget()

return 1

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 10 61

Exemplo em C++ usando swipl-ld

include ltstdiohgt

include ltSWI-Prologhgt

int main(int argc char argv)

char plav[2] = teste NULL

if ( PL_initialise(1 plav) ) PL_halt(1) inicializacao do Prolog

predicate_t p_anc = PL_predicate(ancestral 2 database)

term_t t = PL_new_term_refs(2)

PL_put_atom_chars(t sara)

PL_put_atom_chars(t+1 jose)

qid_t query = PL_open_query(NULL PL_Q_NORMAL p_anc t)

int result = PL_next_solution(query)

while (result)

char x y

PL_get_atom_chars(t ampx)

PL_get_atom_chars(t+1 ampy)

printf(ancestral encontrado (s s)n x y)

result = PL_next_solution(query)

return 0

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 11 61

Exemplo em C++ usando swipl-ld

A compilaccedilatildeo deve ser feita da seguinte forma

swipl-ld -o teste testecpp testepl

Ao executar o exemplo a saiacuteda deve ser

ancestral encontrado (jaco jose)

ancestral encontrado (sara jose)

ancestral encontrado (abraao jose)

ancestral encontrado (isaque jose)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 12 61

Exemplo em Python

from pyswip import Prolog

prolog = Prolog()

print dir(prolog)

prologconsult(testepl)

solutions = list( prologquery(ancestral(X jose)) )

print solutions

for s in solutions

print s[X]

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 13 61

Exemplo em Python

Ao executar o exemplo a saiacuteda deve ser

[_QueryWrapper __doc__ __module__

asserta assertz consult query]

[X jaco X sara

X abraao X isaque]

jaco

sara

abraao

isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 14 61

Exerciacutecios

1 Escolher uma linguagem com paradigma orientado a objetos (JavaC++ Python ou outra qualquer) e implementar a interface comSWI-Prolog usando o exemplo (testepl)

2 Estudar bibliotecas na linguagem escolhida para interaccedilotildees por meiode interface graacuteca

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 15 61

Picat uma linguagem de programaccedilatildeo em loacutegica e multiparadigma

Baseado no material de Claudio Cesar de Saacute Rogeacuterio Eduardo da Silva

Joatildeo Herique Faes Battisti e Paulo Victor de Aguiar

httpsgithubcomclaudiosaCCStreemasterpicat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 16 61

Histoacuterico

Criada em 2013 por Neng-Fa Zhou e Jonathan Fruhman

Utiliza B-Prolog como base de implementaccedilatildeo e ambas utilizam aprogramaccedilatildeo em loacutegica (Loacutegica de Primeira Ordem)

Uma evoluccedilatildeo do Prolog apoacutes mais de 40 anos

Sua atual versatildeo eacute a 21 (6 de novembro de 2017)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 17 61

O que eacute multiparadigma

Imperativo procedural

Funcional

Loacutegico

Uma boa mistura de Haskell Prolog e Python

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 18 61

Algumas caracteriacutesticas

Sintaxe elegante

Velocidade de execuccedilatildeo

Portabilidade

Extensatildeo

Ferramentas

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 19 61

Anacrocircnico de PICAT

P Pattern-matching utiliza o conceito de casamento depadrotildees (semelhante agrave unicaccedilatildeo)

I Intuitive oferece estruturas de decisatildeo atribuiccedilatildeo e laccedilos derepeticcedilatildeo anaacutelogo a outras linguagens de programaccedilatildeo

C Constraints suporta agrave programaccedilatildeo por restriccedilotildees

A Actors suporte a eventos (a ser implementado)

T Tabling implementa a teacutecnica de memoization com soluccedilotildeesimediatas para problemas de programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 20 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 21 61

Instalaccedilatildeo do Picat

Baixar a versatildeo desejada dehttppicat-langorgdownloadhtml

Descompactar Por exemplo em usrlocalPicat

Criar um link simboacutelico (Linux) ou atalhos (Windows)ln -s usrlocalPicatpicat usrbinpicat

Se quiser adicionar (opcional) uma variaacutevel de ambientePICATPATH=usrlocalPicat

export PICATPATH

Ou ainda adicione o caminhoPATH=$PATHusrlocalPicat

Finalmente tenha um editor de coacutedigo de programaSugestatildeo geany ou sublime

Escolha uma sintaxe padratildeo (sugestatildeo Erlang)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 22 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Exemplo em Java

import jpl

import javalangSystem

import javautilHashtable

public class Main

public static void main(String[] args)

Query q1 = new Query(consult new Term[] new Atom(clocaltestepl))

Systemoutprintln(consult + (q1query() succeeded failed))

Query q2 = new Query(ancestral(X jose))

Hashtable[] solution = q2allSolutions()

if (solution = null)

for (int i = 0 i lt solutionlength i++)

Systemoutprintln(X = + solution[i]get(X))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 8 61

Exemplo em Java

Ao executar o exemplo a saiacuteda deve ser

I consult succeeded

testepl compiled 000 sec 20 clauses

X = jaco

X = sara

X = abraao

X = isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 9 61

Exemplo em C++

include ltSWI-cpphgt

include ltiostreamgt

using namespace std

int main()

char argv[] = swipldll -s clocaltestepl NULL

_putenv(SWI_HOME_DIR=cprogram files (x86)swipl)

PlEngine e(3argv)

PlTermv av(2)

av[1] = PlCompound(jose)

PlQuery q(ancestral av)

while (qnext_solution())

cout ltlt (char)av[0] ltlt endl

cinget()

return 1

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 10 61

Exemplo em C++ usando swipl-ld

include ltstdiohgt

include ltSWI-Prologhgt

int main(int argc char argv)

char plav[2] = teste NULL

if ( PL_initialise(1 plav) ) PL_halt(1) inicializacao do Prolog

predicate_t p_anc = PL_predicate(ancestral 2 database)

term_t t = PL_new_term_refs(2)

PL_put_atom_chars(t sara)

PL_put_atom_chars(t+1 jose)

qid_t query = PL_open_query(NULL PL_Q_NORMAL p_anc t)

int result = PL_next_solution(query)

while (result)

char x y

PL_get_atom_chars(t ampx)

PL_get_atom_chars(t+1 ampy)

printf(ancestral encontrado (s s)n x y)

result = PL_next_solution(query)

return 0

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 11 61

Exemplo em C++ usando swipl-ld

A compilaccedilatildeo deve ser feita da seguinte forma

swipl-ld -o teste testecpp testepl

Ao executar o exemplo a saiacuteda deve ser

ancestral encontrado (jaco jose)

ancestral encontrado (sara jose)

ancestral encontrado (abraao jose)

ancestral encontrado (isaque jose)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 12 61

Exemplo em Python

from pyswip import Prolog

prolog = Prolog()

print dir(prolog)

prologconsult(testepl)

solutions = list( prologquery(ancestral(X jose)) )

print solutions

for s in solutions

print s[X]

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 13 61

Exemplo em Python

Ao executar o exemplo a saiacuteda deve ser

[_QueryWrapper __doc__ __module__

asserta assertz consult query]

[X jaco X sara

X abraao X isaque]

jaco

sara

abraao

isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 14 61

Exerciacutecios

1 Escolher uma linguagem com paradigma orientado a objetos (JavaC++ Python ou outra qualquer) e implementar a interface comSWI-Prolog usando o exemplo (testepl)

2 Estudar bibliotecas na linguagem escolhida para interaccedilotildees por meiode interface graacuteca

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 15 61

Picat uma linguagem de programaccedilatildeo em loacutegica e multiparadigma

Baseado no material de Claudio Cesar de Saacute Rogeacuterio Eduardo da Silva

Joatildeo Herique Faes Battisti e Paulo Victor de Aguiar

httpsgithubcomclaudiosaCCStreemasterpicat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 16 61

Histoacuterico

Criada em 2013 por Neng-Fa Zhou e Jonathan Fruhman

Utiliza B-Prolog como base de implementaccedilatildeo e ambas utilizam aprogramaccedilatildeo em loacutegica (Loacutegica de Primeira Ordem)

Uma evoluccedilatildeo do Prolog apoacutes mais de 40 anos

Sua atual versatildeo eacute a 21 (6 de novembro de 2017)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 17 61

O que eacute multiparadigma

Imperativo procedural

Funcional

Loacutegico

Uma boa mistura de Haskell Prolog e Python

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 18 61

Algumas caracteriacutesticas

Sintaxe elegante

Velocidade de execuccedilatildeo

Portabilidade

Extensatildeo

Ferramentas

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 19 61

Anacrocircnico de PICAT

P Pattern-matching utiliza o conceito de casamento depadrotildees (semelhante agrave unicaccedilatildeo)

I Intuitive oferece estruturas de decisatildeo atribuiccedilatildeo e laccedilos derepeticcedilatildeo anaacutelogo a outras linguagens de programaccedilatildeo

C Constraints suporta agrave programaccedilatildeo por restriccedilotildees

A Actors suporte a eventos (a ser implementado)

T Tabling implementa a teacutecnica de memoization com soluccedilotildeesimediatas para problemas de programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 20 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 21 61

Instalaccedilatildeo do Picat

Baixar a versatildeo desejada dehttppicat-langorgdownloadhtml

Descompactar Por exemplo em usrlocalPicat

Criar um link simboacutelico (Linux) ou atalhos (Windows)ln -s usrlocalPicatpicat usrbinpicat

Se quiser adicionar (opcional) uma variaacutevel de ambientePICATPATH=usrlocalPicat

export PICATPATH

Ou ainda adicione o caminhoPATH=$PATHusrlocalPicat

Finalmente tenha um editor de coacutedigo de programaSugestatildeo geany ou sublime

Escolha uma sintaxe padratildeo (sugestatildeo Erlang)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 22 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Exemplo em Java

Ao executar o exemplo a saiacuteda deve ser

I consult succeeded

testepl compiled 000 sec 20 clauses

X = jaco

X = sara

X = abraao

X = isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 9 61

Exemplo em C++

include ltSWI-cpphgt

include ltiostreamgt

using namespace std

int main()

char argv[] = swipldll -s clocaltestepl NULL

_putenv(SWI_HOME_DIR=cprogram files (x86)swipl)

PlEngine e(3argv)

PlTermv av(2)

av[1] = PlCompound(jose)

PlQuery q(ancestral av)

while (qnext_solution())

cout ltlt (char)av[0] ltlt endl

cinget()

return 1

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 10 61

Exemplo em C++ usando swipl-ld

include ltstdiohgt

include ltSWI-Prologhgt

int main(int argc char argv)

char plav[2] = teste NULL

if ( PL_initialise(1 plav) ) PL_halt(1) inicializacao do Prolog

predicate_t p_anc = PL_predicate(ancestral 2 database)

term_t t = PL_new_term_refs(2)

PL_put_atom_chars(t sara)

PL_put_atom_chars(t+1 jose)

qid_t query = PL_open_query(NULL PL_Q_NORMAL p_anc t)

int result = PL_next_solution(query)

while (result)

char x y

PL_get_atom_chars(t ampx)

PL_get_atom_chars(t+1 ampy)

printf(ancestral encontrado (s s)n x y)

result = PL_next_solution(query)

return 0

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 11 61

Exemplo em C++ usando swipl-ld

A compilaccedilatildeo deve ser feita da seguinte forma

swipl-ld -o teste testecpp testepl

Ao executar o exemplo a saiacuteda deve ser

ancestral encontrado (jaco jose)

ancestral encontrado (sara jose)

ancestral encontrado (abraao jose)

ancestral encontrado (isaque jose)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 12 61

Exemplo em Python

from pyswip import Prolog

prolog = Prolog()

print dir(prolog)

prologconsult(testepl)

solutions = list( prologquery(ancestral(X jose)) )

print solutions

for s in solutions

print s[X]

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 13 61

Exemplo em Python

Ao executar o exemplo a saiacuteda deve ser

[_QueryWrapper __doc__ __module__

asserta assertz consult query]

[X jaco X sara

X abraao X isaque]

jaco

sara

abraao

isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 14 61

Exerciacutecios

1 Escolher uma linguagem com paradigma orientado a objetos (JavaC++ Python ou outra qualquer) e implementar a interface comSWI-Prolog usando o exemplo (testepl)

2 Estudar bibliotecas na linguagem escolhida para interaccedilotildees por meiode interface graacuteca

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 15 61

Picat uma linguagem de programaccedilatildeo em loacutegica e multiparadigma

Baseado no material de Claudio Cesar de Saacute Rogeacuterio Eduardo da Silva

Joatildeo Herique Faes Battisti e Paulo Victor de Aguiar

httpsgithubcomclaudiosaCCStreemasterpicat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 16 61

Histoacuterico

Criada em 2013 por Neng-Fa Zhou e Jonathan Fruhman

Utiliza B-Prolog como base de implementaccedilatildeo e ambas utilizam aprogramaccedilatildeo em loacutegica (Loacutegica de Primeira Ordem)

Uma evoluccedilatildeo do Prolog apoacutes mais de 40 anos

Sua atual versatildeo eacute a 21 (6 de novembro de 2017)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 17 61

O que eacute multiparadigma

Imperativo procedural

Funcional

Loacutegico

Uma boa mistura de Haskell Prolog e Python

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 18 61

Algumas caracteriacutesticas

Sintaxe elegante

Velocidade de execuccedilatildeo

Portabilidade

Extensatildeo

Ferramentas

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 19 61

Anacrocircnico de PICAT

P Pattern-matching utiliza o conceito de casamento depadrotildees (semelhante agrave unicaccedilatildeo)

I Intuitive oferece estruturas de decisatildeo atribuiccedilatildeo e laccedilos derepeticcedilatildeo anaacutelogo a outras linguagens de programaccedilatildeo

C Constraints suporta agrave programaccedilatildeo por restriccedilotildees

A Actors suporte a eventos (a ser implementado)

T Tabling implementa a teacutecnica de memoization com soluccedilotildeesimediatas para problemas de programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 20 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 21 61

Instalaccedilatildeo do Picat

Baixar a versatildeo desejada dehttppicat-langorgdownloadhtml

Descompactar Por exemplo em usrlocalPicat

Criar um link simboacutelico (Linux) ou atalhos (Windows)ln -s usrlocalPicatpicat usrbinpicat

Se quiser adicionar (opcional) uma variaacutevel de ambientePICATPATH=usrlocalPicat

export PICATPATH

Ou ainda adicione o caminhoPATH=$PATHusrlocalPicat

Finalmente tenha um editor de coacutedigo de programaSugestatildeo geany ou sublime

Escolha uma sintaxe padratildeo (sugestatildeo Erlang)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 22 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Exemplo em C++

include ltSWI-cpphgt

include ltiostreamgt

using namespace std

int main()

char argv[] = swipldll -s clocaltestepl NULL

_putenv(SWI_HOME_DIR=cprogram files (x86)swipl)

PlEngine e(3argv)

PlTermv av(2)

av[1] = PlCompound(jose)

PlQuery q(ancestral av)

while (qnext_solution())

cout ltlt (char)av[0] ltlt endl

cinget()

return 1

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 10 61

Exemplo em C++ usando swipl-ld

include ltstdiohgt

include ltSWI-Prologhgt

int main(int argc char argv)

char plav[2] = teste NULL

if ( PL_initialise(1 plav) ) PL_halt(1) inicializacao do Prolog

predicate_t p_anc = PL_predicate(ancestral 2 database)

term_t t = PL_new_term_refs(2)

PL_put_atom_chars(t sara)

PL_put_atom_chars(t+1 jose)

qid_t query = PL_open_query(NULL PL_Q_NORMAL p_anc t)

int result = PL_next_solution(query)

while (result)

char x y

PL_get_atom_chars(t ampx)

PL_get_atom_chars(t+1 ampy)

printf(ancestral encontrado (s s)n x y)

result = PL_next_solution(query)

return 0

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 11 61

Exemplo em C++ usando swipl-ld

A compilaccedilatildeo deve ser feita da seguinte forma

swipl-ld -o teste testecpp testepl

Ao executar o exemplo a saiacuteda deve ser

ancestral encontrado (jaco jose)

ancestral encontrado (sara jose)

ancestral encontrado (abraao jose)

ancestral encontrado (isaque jose)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 12 61

Exemplo em Python

from pyswip import Prolog

prolog = Prolog()

print dir(prolog)

prologconsult(testepl)

solutions = list( prologquery(ancestral(X jose)) )

print solutions

for s in solutions

print s[X]

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 13 61

Exemplo em Python

Ao executar o exemplo a saiacuteda deve ser

[_QueryWrapper __doc__ __module__

asserta assertz consult query]

[X jaco X sara

X abraao X isaque]

jaco

sara

abraao

isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 14 61

Exerciacutecios

1 Escolher uma linguagem com paradigma orientado a objetos (JavaC++ Python ou outra qualquer) e implementar a interface comSWI-Prolog usando o exemplo (testepl)

2 Estudar bibliotecas na linguagem escolhida para interaccedilotildees por meiode interface graacuteca

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 15 61

Picat uma linguagem de programaccedilatildeo em loacutegica e multiparadigma

Baseado no material de Claudio Cesar de Saacute Rogeacuterio Eduardo da Silva

Joatildeo Herique Faes Battisti e Paulo Victor de Aguiar

httpsgithubcomclaudiosaCCStreemasterpicat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 16 61

Histoacuterico

Criada em 2013 por Neng-Fa Zhou e Jonathan Fruhman

Utiliza B-Prolog como base de implementaccedilatildeo e ambas utilizam aprogramaccedilatildeo em loacutegica (Loacutegica de Primeira Ordem)

Uma evoluccedilatildeo do Prolog apoacutes mais de 40 anos

Sua atual versatildeo eacute a 21 (6 de novembro de 2017)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 17 61

O que eacute multiparadigma

Imperativo procedural

Funcional

Loacutegico

Uma boa mistura de Haskell Prolog e Python

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 18 61

Algumas caracteriacutesticas

Sintaxe elegante

Velocidade de execuccedilatildeo

Portabilidade

Extensatildeo

Ferramentas

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 19 61

Anacrocircnico de PICAT

P Pattern-matching utiliza o conceito de casamento depadrotildees (semelhante agrave unicaccedilatildeo)

I Intuitive oferece estruturas de decisatildeo atribuiccedilatildeo e laccedilos derepeticcedilatildeo anaacutelogo a outras linguagens de programaccedilatildeo

C Constraints suporta agrave programaccedilatildeo por restriccedilotildees

A Actors suporte a eventos (a ser implementado)

T Tabling implementa a teacutecnica de memoization com soluccedilotildeesimediatas para problemas de programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 20 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 21 61

Instalaccedilatildeo do Picat

Baixar a versatildeo desejada dehttppicat-langorgdownloadhtml

Descompactar Por exemplo em usrlocalPicat

Criar um link simboacutelico (Linux) ou atalhos (Windows)ln -s usrlocalPicatpicat usrbinpicat

Se quiser adicionar (opcional) uma variaacutevel de ambientePICATPATH=usrlocalPicat

export PICATPATH

Ou ainda adicione o caminhoPATH=$PATHusrlocalPicat

Finalmente tenha um editor de coacutedigo de programaSugestatildeo geany ou sublime

Escolha uma sintaxe padratildeo (sugestatildeo Erlang)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 22 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Exemplo em C++ usando swipl-ld

include ltstdiohgt

include ltSWI-Prologhgt

int main(int argc char argv)

char plav[2] = teste NULL

if ( PL_initialise(1 plav) ) PL_halt(1) inicializacao do Prolog

predicate_t p_anc = PL_predicate(ancestral 2 database)

term_t t = PL_new_term_refs(2)

PL_put_atom_chars(t sara)

PL_put_atom_chars(t+1 jose)

qid_t query = PL_open_query(NULL PL_Q_NORMAL p_anc t)

int result = PL_next_solution(query)

while (result)

char x y

PL_get_atom_chars(t ampx)

PL_get_atom_chars(t+1 ampy)

printf(ancestral encontrado (s s)n x y)

result = PL_next_solution(query)

return 0

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 11 61

Exemplo em C++ usando swipl-ld

A compilaccedilatildeo deve ser feita da seguinte forma

swipl-ld -o teste testecpp testepl

Ao executar o exemplo a saiacuteda deve ser

ancestral encontrado (jaco jose)

ancestral encontrado (sara jose)

ancestral encontrado (abraao jose)

ancestral encontrado (isaque jose)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 12 61

Exemplo em Python

from pyswip import Prolog

prolog = Prolog()

print dir(prolog)

prologconsult(testepl)

solutions = list( prologquery(ancestral(X jose)) )

print solutions

for s in solutions

print s[X]

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 13 61

Exemplo em Python

Ao executar o exemplo a saiacuteda deve ser

[_QueryWrapper __doc__ __module__

asserta assertz consult query]

[X jaco X sara

X abraao X isaque]

jaco

sara

abraao

isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 14 61

Exerciacutecios

1 Escolher uma linguagem com paradigma orientado a objetos (JavaC++ Python ou outra qualquer) e implementar a interface comSWI-Prolog usando o exemplo (testepl)

2 Estudar bibliotecas na linguagem escolhida para interaccedilotildees por meiode interface graacuteca

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 15 61

Picat uma linguagem de programaccedilatildeo em loacutegica e multiparadigma

Baseado no material de Claudio Cesar de Saacute Rogeacuterio Eduardo da Silva

Joatildeo Herique Faes Battisti e Paulo Victor de Aguiar

httpsgithubcomclaudiosaCCStreemasterpicat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 16 61

Histoacuterico

Criada em 2013 por Neng-Fa Zhou e Jonathan Fruhman

Utiliza B-Prolog como base de implementaccedilatildeo e ambas utilizam aprogramaccedilatildeo em loacutegica (Loacutegica de Primeira Ordem)

Uma evoluccedilatildeo do Prolog apoacutes mais de 40 anos

Sua atual versatildeo eacute a 21 (6 de novembro de 2017)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 17 61

O que eacute multiparadigma

Imperativo procedural

Funcional

Loacutegico

Uma boa mistura de Haskell Prolog e Python

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 18 61

Algumas caracteriacutesticas

Sintaxe elegante

Velocidade de execuccedilatildeo

Portabilidade

Extensatildeo

Ferramentas

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 19 61

Anacrocircnico de PICAT

P Pattern-matching utiliza o conceito de casamento depadrotildees (semelhante agrave unicaccedilatildeo)

I Intuitive oferece estruturas de decisatildeo atribuiccedilatildeo e laccedilos derepeticcedilatildeo anaacutelogo a outras linguagens de programaccedilatildeo

C Constraints suporta agrave programaccedilatildeo por restriccedilotildees

A Actors suporte a eventos (a ser implementado)

T Tabling implementa a teacutecnica de memoization com soluccedilotildeesimediatas para problemas de programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 20 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 21 61

Instalaccedilatildeo do Picat

Baixar a versatildeo desejada dehttppicat-langorgdownloadhtml

Descompactar Por exemplo em usrlocalPicat

Criar um link simboacutelico (Linux) ou atalhos (Windows)ln -s usrlocalPicatpicat usrbinpicat

Se quiser adicionar (opcional) uma variaacutevel de ambientePICATPATH=usrlocalPicat

export PICATPATH

Ou ainda adicione o caminhoPATH=$PATHusrlocalPicat

Finalmente tenha um editor de coacutedigo de programaSugestatildeo geany ou sublime

Escolha uma sintaxe padratildeo (sugestatildeo Erlang)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 22 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Exemplo em C++ usando swipl-ld

A compilaccedilatildeo deve ser feita da seguinte forma

swipl-ld -o teste testecpp testepl

Ao executar o exemplo a saiacuteda deve ser

ancestral encontrado (jaco jose)

ancestral encontrado (sara jose)

ancestral encontrado (abraao jose)

ancestral encontrado (isaque jose)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 12 61

Exemplo em Python

from pyswip import Prolog

prolog = Prolog()

print dir(prolog)

prologconsult(testepl)

solutions = list( prologquery(ancestral(X jose)) )

print solutions

for s in solutions

print s[X]

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 13 61

Exemplo em Python

Ao executar o exemplo a saiacuteda deve ser

[_QueryWrapper __doc__ __module__

asserta assertz consult query]

[X jaco X sara

X abraao X isaque]

jaco

sara

abraao

isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 14 61

Exerciacutecios

1 Escolher uma linguagem com paradigma orientado a objetos (JavaC++ Python ou outra qualquer) e implementar a interface comSWI-Prolog usando o exemplo (testepl)

2 Estudar bibliotecas na linguagem escolhida para interaccedilotildees por meiode interface graacuteca

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 15 61

Picat uma linguagem de programaccedilatildeo em loacutegica e multiparadigma

Baseado no material de Claudio Cesar de Saacute Rogeacuterio Eduardo da Silva

Joatildeo Herique Faes Battisti e Paulo Victor de Aguiar

httpsgithubcomclaudiosaCCStreemasterpicat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 16 61

Histoacuterico

Criada em 2013 por Neng-Fa Zhou e Jonathan Fruhman

Utiliza B-Prolog como base de implementaccedilatildeo e ambas utilizam aprogramaccedilatildeo em loacutegica (Loacutegica de Primeira Ordem)

Uma evoluccedilatildeo do Prolog apoacutes mais de 40 anos

Sua atual versatildeo eacute a 21 (6 de novembro de 2017)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 17 61

O que eacute multiparadigma

Imperativo procedural

Funcional

Loacutegico

Uma boa mistura de Haskell Prolog e Python

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 18 61

Algumas caracteriacutesticas

Sintaxe elegante

Velocidade de execuccedilatildeo

Portabilidade

Extensatildeo

Ferramentas

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 19 61

Anacrocircnico de PICAT

P Pattern-matching utiliza o conceito de casamento depadrotildees (semelhante agrave unicaccedilatildeo)

I Intuitive oferece estruturas de decisatildeo atribuiccedilatildeo e laccedilos derepeticcedilatildeo anaacutelogo a outras linguagens de programaccedilatildeo

C Constraints suporta agrave programaccedilatildeo por restriccedilotildees

A Actors suporte a eventos (a ser implementado)

T Tabling implementa a teacutecnica de memoization com soluccedilotildeesimediatas para problemas de programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 20 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 21 61

Instalaccedilatildeo do Picat

Baixar a versatildeo desejada dehttppicat-langorgdownloadhtml

Descompactar Por exemplo em usrlocalPicat

Criar um link simboacutelico (Linux) ou atalhos (Windows)ln -s usrlocalPicatpicat usrbinpicat

Se quiser adicionar (opcional) uma variaacutevel de ambientePICATPATH=usrlocalPicat

export PICATPATH

Ou ainda adicione o caminhoPATH=$PATHusrlocalPicat

Finalmente tenha um editor de coacutedigo de programaSugestatildeo geany ou sublime

Escolha uma sintaxe padratildeo (sugestatildeo Erlang)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 22 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Exemplo em Python

from pyswip import Prolog

prolog = Prolog()

print dir(prolog)

prologconsult(testepl)

solutions = list( prologquery(ancestral(X jose)) )

print solutions

for s in solutions

print s[X]

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 13 61

Exemplo em Python

Ao executar o exemplo a saiacuteda deve ser

[_QueryWrapper __doc__ __module__

asserta assertz consult query]

[X jaco X sara

X abraao X isaque]

jaco

sara

abraao

isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 14 61

Exerciacutecios

1 Escolher uma linguagem com paradigma orientado a objetos (JavaC++ Python ou outra qualquer) e implementar a interface comSWI-Prolog usando o exemplo (testepl)

2 Estudar bibliotecas na linguagem escolhida para interaccedilotildees por meiode interface graacuteca

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 15 61

Picat uma linguagem de programaccedilatildeo em loacutegica e multiparadigma

Baseado no material de Claudio Cesar de Saacute Rogeacuterio Eduardo da Silva

Joatildeo Herique Faes Battisti e Paulo Victor de Aguiar

httpsgithubcomclaudiosaCCStreemasterpicat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 16 61

Histoacuterico

Criada em 2013 por Neng-Fa Zhou e Jonathan Fruhman

Utiliza B-Prolog como base de implementaccedilatildeo e ambas utilizam aprogramaccedilatildeo em loacutegica (Loacutegica de Primeira Ordem)

Uma evoluccedilatildeo do Prolog apoacutes mais de 40 anos

Sua atual versatildeo eacute a 21 (6 de novembro de 2017)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 17 61

O que eacute multiparadigma

Imperativo procedural

Funcional

Loacutegico

Uma boa mistura de Haskell Prolog e Python

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 18 61

Algumas caracteriacutesticas

Sintaxe elegante

Velocidade de execuccedilatildeo

Portabilidade

Extensatildeo

Ferramentas

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 19 61

Anacrocircnico de PICAT

P Pattern-matching utiliza o conceito de casamento depadrotildees (semelhante agrave unicaccedilatildeo)

I Intuitive oferece estruturas de decisatildeo atribuiccedilatildeo e laccedilos derepeticcedilatildeo anaacutelogo a outras linguagens de programaccedilatildeo

C Constraints suporta agrave programaccedilatildeo por restriccedilotildees

A Actors suporte a eventos (a ser implementado)

T Tabling implementa a teacutecnica de memoization com soluccedilotildeesimediatas para problemas de programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 20 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 21 61

Instalaccedilatildeo do Picat

Baixar a versatildeo desejada dehttppicat-langorgdownloadhtml

Descompactar Por exemplo em usrlocalPicat

Criar um link simboacutelico (Linux) ou atalhos (Windows)ln -s usrlocalPicatpicat usrbinpicat

Se quiser adicionar (opcional) uma variaacutevel de ambientePICATPATH=usrlocalPicat

export PICATPATH

Ou ainda adicione o caminhoPATH=$PATHusrlocalPicat

Finalmente tenha um editor de coacutedigo de programaSugestatildeo geany ou sublime

Escolha uma sintaxe padratildeo (sugestatildeo Erlang)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 22 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Exemplo em Python

Ao executar o exemplo a saiacuteda deve ser

[_QueryWrapper __doc__ __module__

asserta assertz consult query]

[X jaco X sara

X abraao X isaque]

jaco

sara

abraao

isaque

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 14 61

Exerciacutecios

1 Escolher uma linguagem com paradigma orientado a objetos (JavaC++ Python ou outra qualquer) e implementar a interface comSWI-Prolog usando o exemplo (testepl)

2 Estudar bibliotecas na linguagem escolhida para interaccedilotildees por meiode interface graacuteca

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 15 61

Picat uma linguagem de programaccedilatildeo em loacutegica e multiparadigma

Baseado no material de Claudio Cesar de Saacute Rogeacuterio Eduardo da Silva

Joatildeo Herique Faes Battisti e Paulo Victor de Aguiar

httpsgithubcomclaudiosaCCStreemasterpicat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 16 61

Histoacuterico

Criada em 2013 por Neng-Fa Zhou e Jonathan Fruhman

Utiliza B-Prolog como base de implementaccedilatildeo e ambas utilizam aprogramaccedilatildeo em loacutegica (Loacutegica de Primeira Ordem)

Uma evoluccedilatildeo do Prolog apoacutes mais de 40 anos

Sua atual versatildeo eacute a 21 (6 de novembro de 2017)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 17 61

O que eacute multiparadigma

Imperativo procedural

Funcional

Loacutegico

Uma boa mistura de Haskell Prolog e Python

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 18 61

Algumas caracteriacutesticas

Sintaxe elegante

Velocidade de execuccedilatildeo

Portabilidade

Extensatildeo

Ferramentas

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 19 61

Anacrocircnico de PICAT

P Pattern-matching utiliza o conceito de casamento depadrotildees (semelhante agrave unicaccedilatildeo)

I Intuitive oferece estruturas de decisatildeo atribuiccedilatildeo e laccedilos derepeticcedilatildeo anaacutelogo a outras linguagens de programaccedilatildeo

C Constraints suporta agrave programaccedilatildeo por restriccedilotildees

A Actors suporte a eventos (a ser implementado)

T Tabling implementa a teacutecnica de memoization com soluccedilotildeesimediatas para problemas de programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 20 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 21 61

Instalaccedilatildeo do Picat

Baixar a versatildeo desejada dehttppicat-langorgdownloadhtml

Descompactar Por exemplo em usrlocalPicat

Criar um link simboacutelico (Linux) ou atalhos (Windows)ln -s usrlocalPicatpicat usrbinpicat

Se quiser adicionar (opcional) uma variaacutevel de ambientePICATPATH=usrlocalPicat

export PICATPATH

Ou ainda adicione o caminhoPATH=$PATHusrlocalPicat

Finalmente tenha um editor de coacutedigo de programaSugestatildeo geany ou sublime

Escolha uma sintaxe padratildeo (sugestatildeo Erlang)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 22 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Exerciacutecios

1 Escolher uma linguagem com paradigma orientado a objetos (JavaC++ Python ou outra qualquer) e implementar a interface comSWI-Prolog usando o exemplo (testepl)

2 Estudar bibliotecas na linguagem escolhida para interaccedilotildees por meiode interface graacuteca

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 15 61

Picat uma linguagem de programaccedilatildeo em loacutegica e multiparadigma

Baseado no material de Claudio Cesar de Saacute Rogeacuterio Eduardo da Silva

Joatildeo Herique Faes Battisti e Paulo Victor de Aguiar

httpsgithubcomclaudiosaCCStreemasterpicat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 16 61

Histoacuterico

Criada em 2013 por Neng-Fa Zhou e Jonathan Fruhman

Utiliza B-Prolog como base de implementaccedilatildeo e ambas utilizam aprogramaccedilatildeo em loacutegica (Loacutegica de Primeira Ordem)

Uma evoluccedilatildeo do Prolog apoacutes mais de 40 anos

Sua atual versatildeo eacute a 21 (6 de novembro de 2017)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 17 61

O que eacute multiparadigma

Imperativo procedural

Funcional

Loacutegico

Uma boa mistura de Haskell Prolog e Python

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 18 61

Algumas caracteriacutesticas

Sintaxe elegante

Velocidade de execuccedilatildeo

Portabilidade

Extensatildeo

Ferramentas

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 19 61

Anacrocircnico de PICAT

P Pattern-matching utiliza o conceito de casamento depadrotildees (semelhante agrave unicaccedilatildeo)

I Intuitive oferece estruturas de decisatildeo atribuiccedilatildeo e laccedilos derepeticcedilatildeo anaacutelogo a outras linguagens de programaccedilatildeo

C Constraints suporta agrave programaccedilatildeo por restriccedilotildees

A Actors suporte a eventos (a ser implementado)

T Tabling implementa a teacutecnica de memoization com soluccedilotildeesimediatas para problemas de programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 20 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 21 61

Instalaccedilatildeo do Picat

Baixar a versatildeo desejada dehttppicat-langorgdownloadhtml

Descompactar Por exemplo em usrlocalPicat

Criar um link simboacutelico (Linux) ou atalhos (Windows)ln -s usrlocalPicatpicat usrbinpicat

Se quiser adicionar (opcional) uma variaacutevel de ambientePICATPATH=usrlocalPicat

export PICATPATH

Ou ainda adicione o caminhoPATH=$PATHusrlocalPicat

Finalmente tenha um editor de coacutedigo de programaSugestatildeo geany ou sublime

Escolha uma sintaxe padratildeo (sugestatildeo Erlang)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 22 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Picat uma linguagem de programaccedilatildeo em loacutegica e multiparadigma

Baseado no material de Claudio Cesar de Saacute Rogeacuterio Eduardo da Silva

Joatildeo Herique Faes Battisti e Paulo Victor de Aguiar

httpsgithubcomclaudiosaCCStreemasterpicat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 16 61

Histoacuterico

Criada em 2013 por Neng-Fa Zhou e Jonathan Fruhman

Utiliza B-Prolog como base de implementaccedilatildeo e ambas utilizam aprogramaccedilatildeo em loacutegica (Loacutegica de Primeira Ordem)

Uma evoluccedilatildeo do Prolog apoacutes mais de 40 anos

Sua atual versatildeo eacute a 21 (6 de novembro de 2017)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 17 61

O que eacute multiparadigma

Imperativo procedural

Funcional

Loacutegico

Uma boa mistura de Haskell Prolog e Python

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 18 61

Algumas caracteriacutesticas

Sintaxe elegante

Velocidade de execuccedilatildeo

Portabilidade

Extensatildeo

Ferramentas

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 19 61

Anacrocircnico de PICAT

P Pattern-matching utiliza o conceito de casamento depadrotildees (semelhante agrave unicaccedilatildeo)

I Intuitive oferece estruturas de decisatildeo atribuiccedilatildeo e laccedilos derepeticcedilatildeo anaacutelogo a outras linguagens de programaccedilatildeo

C Constraints suporta agrave programaccedilatildeo por restriccedilotildees

A Actors suporte a eventos (a ser implementado)

T Tabling implementa a teacutecnica de memoization com soluccedilotildeesimediatas para problemas de programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 20 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 21 61

Instalaccedilatildeo do Picat

Baixar a versatildeo desejada dehttppicat-langorgdownloadhtml

Descompactar Por exemplo em usrlocalPicat

Criar um link simboacutelico (Linux) ou atalhos (Windows)ln -s usrlocalPicatpicat usrbinpicat

Se quiser adicionar (opcional) uma variaacutevel de ambientePICATPATH=usrlocalPicat

export PICATPATH

Ou ainda adicione o caminhoPATH=$PATHusrlocalPicat

Finalmente tenha um editor de coacutedigo de programaSugestatildeo geany ou sublime

Escolha uma sintaxe padratildeo (sugestatildeo Erlang)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 22 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Histoacuterico

Criada em 2013 por Neng-Fa Zhou e Jonathan Fruhman

Utiliza B-Prolog como base de implementaccedilatildeo e ambas utilizam aprogramaccedilatildeo em loacutegica (Loacutegica de Primeira Ordem)

Uma evoluccedilatildeo do Prolog apoacutes mais de 40 anos

Sua atual versatildeo eacute a 21 (6 de novembro de 2017)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 17 61

O que eacute multiparadigma

Imperativo procedural

Funcional

Loacutegico

Uma boa mistura de Haskell Prolog e Python

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 18 61

Algumas caracteriacutesticas

Sintaxe elegante

Velocidade de execuccedilatildeo

Portabilidade

Extensatildeo

Ferramentas

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 19 61

Anacrocircnico de PICAT

P Pattern-matching utiliza o conceito de casamento depadrotildees (semelhante agrave unicaccedilatildeo)

I Intuitive oferece estruturas de decisatildeo atribuiccedilatildeo e laccedilos derepeticcedilatildeo anaacutelogo a outras linguagens de programaccedilatildeo

C Constraints suporta agrave programaccedilatildeo por restriccedilotildees

A Actors suporte a eventos (a ser implementado)

T Tabling implementa a teacutecnica de memoization com soluccedilotildeesimediatas para problemas de programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 20 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 21 61

Instalaccedilatildeo do Picat

Baixar a versatildeo desejada dehttppicat-langorgdownloadhtml

Descompactar Por exemplo em usrlocalPicat

Criar um link simboacutelico (Linux) ou atalhos (Windows)ln -s usrlocalPicatpicat usrbinpicat

Se quiser adicionar (opcional) uma variaacutevel de ambientePICATPATH=usrlocalPicat

export PICATPATH

Ou ainda adicione o caminhoPATH=$PATHusrlocalPicat

Finalmente tenha um editor de coacutedigo de programaSugestatildeo geany ou sublime

Escolha uma sintaxe padratildeo (sugestatildeo Erlang)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 22 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

O que eacute multiparadigma

Imperativo procedural

Funcional

Loacutegico

Uma boa mistura de Haskell Prolog e Python

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 18 61

Algumas caracteriacutesticas

Sintaxe elegante

Velocidade de execuccedilatildeo

Portabilidade

Extensatildeo

Ferramentas

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 19 61

Anacrocircnico de PICAT

P Pattern-matching utiliza o conceito de casamento depadrotildees (semelhante agrave unicaccedilatildeo)

I Intuitive oferece estruturas de decisatildeo atribuiccedilatildeo e laccedilos derepeticcedilatildeo anaacutelogo a outras linguagens de programaccedilatildeo

C Constraints suporta agrave programaccedilatildeo por restriccedilotildees

A Actors suporte a eventos (a ser implementado)

T Tabling implementa a teacutecnica de memoization com soluccedilotildeesimediatas para problemas de programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 20 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 21 61

Instalaccedilatildeo do Picat

Baixar a versatildeo desejada dehttppicat-langorgdownloadhtml

Descompactar Por exemplo em usrlocalPicat

Criar um link simboacutelico (Linux) ou atalhos (Windows)ln -s usrlocalPicatpicat usrbinpicat

Se quiser adicionar (opcional) uma variaacutevel de ambientePICATPATH=usrlocalPicat

export PICATPATH

Ou ainda adicione o caminhoPATH=$PATHusrlocalPicat

Finalmente tenha um editor de coacutedigo de programaSugestatildeo geany ou sublime

Escolha uma sintaxe padratildeo (sugestatildeo Erlang)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 22 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Algumas caracteriacutesticas

Sintaxe elegante

Velocidade de execuccedilatildeo

Portabilidade

Extensatildeo

Ferramentas

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 19 61

Anacrocircnico de PICAT

P Pattern-matching utiliza o conceito de casamento depadrotildees (semelhante agrave unicaccedilatildeo)

I Intuitive oferece estruturas de decisatildeo atribuiccedilatildeo e laccedilos derepeticcedilatildeo anaacutelogo a outras linguagens de programaccedilatildeo

C Constraints suporta agrave programaccedilatildeo por restriccedilotildees

A Actors suporte a eventos (a ser implementado)

T Tabling implementa a teacutecnica de memoization com soluccedilotildeesimediatas para problemas de programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 20 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 21 61

Instalaccedilatildeo do Picat

Baixar a versatildeo desejada dehttppicat-langorgdownloadhtml

Descompactar Por exemplo em usrlocalPicat

Criar um link simboacutelico (Linux) ou atalhos (Windows)ln -s usrlocalPicatpicat usrbinpicat

Se quiser adicionar (opcional) uma variaacutevel de ambientePICATPATH=usrlocalPicat

export PICATPATH

Ou ainda adicione o caminhoPATH=$PATHusrlocalPicat

Finalmente tenha um editor de coacutedigo de programaSugestatildeo geany ou sublime

Escolha uma sintaxe padratildeo (sugestatildeo Erlang)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 22 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Anacrocircnico de PICAT

P Pattern-matching utiliza o conceito de casamento depadrotildees (semelhante agrave unicaccedilatildeo)

I Intuitive oferece estruturas de decisatildeo atribuiccedilatildeo e laccedilos derepeticcedilatildeo anaacutelogo a outras linguagens de programaccedilatildeo

C Constraints suporta agrave programaccedilatildeo por restriccedilotildees

A Actors suporte a eventos (a ser implementado)

T Tabling implementa a teacutecnica de memoization com soluccedilotildeesimediatas para problemas de programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 20 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 21 61

Instalaccedilatildeo do Picat

Baixar a versatildeo desejada dehttppicat-langorgdownloadhtml

Descompactar Por exemplo em usrlocalPicat

Criar um link simboacutelico (Linux) ou atalhos (Windows)ln -s usrlocalPicatpicat usrbinpicat

Se quiser adicionar (opcional) uma variaacutevel de ambientePICATPATH=usrlocalPicat

export PICATPATH

Ou ainda adicione o caminhoPATH=$PATHusrlocalPicat

Finalmente tenha um editor de coacutedigo de programaSugestatildeo geany ou sublime

Escolha uma sintaxe padratildeo (sugestatildeo Erlang)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 22 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 21 61

Instalaccedilatildeo do Picat

Baixar a versatildeo desejada dehttppicat-langorgdownloadhtml

Descompactar Por exemplo em usrlocalPicat

Criar um link simboacutelico (Linux) ou atalhos (Windows)ln -s usrlocalPicatpicat usrbinpicat

Se quiser adicionar (opcional) uma variaacutevel de ambientePICATPATH=usrlocalPicat

export PICATPATH

Ou ainda adicione o caminhoPATH=$PATHusrlocalPicat

Finalmente tenha um editor de coacutedigo de programaSugestatildeo geany ou sublime

Escolha uma sintaxe padratildeo (sugestatildeo Erlang)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 22 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Instalaccedilatildeo do Picat

Baixar a versatildeo desejada dehttppicat-langorgdownloadhtml

Descompactar Por exemplo em usrlocalPicat

Criar um link simboacutelico (Linux) ou atalhos (Windows)ln -s usrlocalPicatpicat usrbinpicat

Se quiser adicionar (opcional) uma variaacutevel de ambientePICATPATH=usrlocalPicat

export PICATPATH

Ou ainda adicione o caminhoPATH=$PATHusrlocalPicat

Finalmente tenha um editor de coacutedigo de programaSugestatildeo geany ou sublime

Escolha uma sintaxe padratildeo (sugestatildeo Erlang)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 22 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 23 61

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

WebIDE

httppicatretinaufscbrpicathtml

Figura Picat Online

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 24 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 25 61

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Usando o Picat

Picat eacute uma linguagem de multiplataforma disponiacutevel em diversossistemas operacionains

Seus arquivos fontes utilizam a extensatildeo pi

Existem dois modos de utilizaccedilatildeo do Picat linha de comando (ouconsole) e interativo

Interpretaccedilatildeo em maacutequina virtual (ainda natildeo haacute possibilidade decoacutedigos executaacuteveis stand-alone)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 26 61

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Fatos e regras

pai(platao luna) leia-se Platatildeo eacute o pai de Luna

pai(platao pericles) leia-se Platatildeo eacute o pai de Peacutericles

pai(epimenides platao) leia-se Soacutecrates eacute o pai de Platatildeo

middot middot middotCodicando em Picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 27 61

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Regras em Picat I

1 FATOS - arvore geneologica

2 --------------------------

3 index(--)

4 pai(platao pericles )

5 pai(platao eratostenes )

6 pai(epimenides platao )

7 pai(bartolomeu epimenides )

8

9 REGRAS - exemplos

10 -----------------

11 definindo um avo pai do pai

12 avo(XY) =gt pai(XZ) pai(ZY)

13

14 definindo um irmao alguem que tenha o mesmo pai

15 irmao(XY) =gt pai(ZX) 1o a ser avaliado

16 pai(ZY) 2o a ser avaliado

17 X == Y

18 ==(X Y) 3o a ser avaliado

19

20 MAIS REGRAS

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 28 61

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Regras em Picat II

21 -----------

22

23 listar_pais =gt =gt regra backtrackavel

24 pai(XY) and

25 printf(n ==gt w e pai de w X Y)

26 false

27

28 listar_pais =gt

29 printf(n )

30 true final da regra acima

31

32 listar_ant =gt

33 antepassado(XY)

34 printf(n ==gt w e ANTEPASSADO de w X Y)

35 false

36

37 listar_ant =gt

38 printf(n )

39 true

40

41

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 29 61

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Regras em Picat III

42 main

43 ----

44 main =gt =gt

45 listar_pais

46 listar_ant

47 avo(XY) printf (n ==gt w eh avo de w X Y)

48 irmao(ZW) printf ( n ==gt w eh irmao de w Z W)

49 false

50 main =gt true

51

52

53 1 Todo x que eh pai de um y implica

54 em x ser um antepassado de y

55

56 QxQy (pai(xy) --gt antepassado(xy))

57

58 2 Todo x que eh pai de um z e z

59 eh um antepassado de y

60 entao x eh antepassado de y

61

62 QxQyQz (pai(xz) and antepassado(zy) --gt antepassado(xy))

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 30 61

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Regras em Picat IV

63

64 EM PICAT - clausulas de HORN

65

66

67 antepassado(XY) =gt pai(XY)

68 antepassado(XY) =gt pai(XZ)

69 antepassado(ZY)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 31 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 32 61

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Nuacutemero

Picatgt A = 5 B = 7 number(A) number(B) max(A B) =

Maximo min(A B) = Minimo

A = 5

B = 7

Maximo = 7

Minimo = 5

yes

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 33 61

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Atribuiccedilatildeo

Picatgt X = 7 X = X + 7 X = X + 7

X = 21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 34 61

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Estruturas de controle

1 teste =gt

2 X = 3

3 Y = 4

4 if (X gt= Y)

5 then

6 printf(n X eh maior dn X)

7 else

8 printf(n senao Y eh maior dn Y)

9 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 35 61

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Entradas e saiacutedas

1 main =gt

2 printf(n Digite dois numeros )

3 N_real_01 = read_real()

4 N_real_02 = read_real()

5 Media = (N_real_01 + N_real_02) 2

6 printf( A media eh 64f Media )

7 printf(n FIM n )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 36 61

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Contexto dos tipos de dados

Lembrar que predicados apresentam valores V (yes) ou F (no) efunccedilotildees retornam valores

Funccedilotildees em Picat satildeo anaacutelogas a funccedilotildees das linguagens deprogramaccedilatildeo claacutessicas

Predicados satildeo anaacutelogos agraves linguagens de loacutegica primeira ordem(Prolog e suas derivaccedilotildees)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 37 61

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Tipos de dados

Figura Hierarquia dos tipos de dados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 38 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 39 61

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Variaacutevel

Em Picat comeccedilam por letras MAIUacuteSCULAS Ex VelocidadeTEMPO etc

Como na matemaacutetica armazenam valores outras variaacuteveis estruturascomplexas etc

Diferente de outras linguagens natildeo possuem endereccedilo de memoacuteria xo

A variaacutevel estaacute instanciada (bound) ou estaacute livre (free)

Uma vez instanciada permanece com um determinado valor nachamada corrente

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 40 61

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Exemplo de variaacutevel I

X = 34 println(xzinho = X)

X = 34 Y = 34 Z = X + Y

X = 34 println(xzinho = X) X = 17 println(xzinho =

X)

Mas X = 34 X = 17 println(xzinho = X)

logo X = 34 eacute diferente de X = 34

Assim cuidar em Picat no caso de

I = eacute o operador de unicaccedilatildeo ou casamento de variaacuteveis livresI = eacute a atribuiccedilatildeo das linguagens claacutessicasI == eacute a comparaccedilatildeo entre dois termos

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 41 61

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Exemplo de variaacutevel II

Predicado uacutetil bind_vars(XYZ 56789)

X = 56789000000000001Y = 56789000000000001Z = 56789000000000001yes

Igualmente X = 23456 copy_term(X) = Y

X = 234560000000000002Y = 234560000000000002yesrArr Caso X se encontre unicado (venha com um casamento depadratildeo) e se deseja alguma modicaccedilatildeo a partir de X Entatildeo realiza-seuma coacutepia do mesmo para uma variaacutevel temporaacuteria Y e modica-se Y

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 42 61

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Exemplo de variaacutevel III

Pode-se utilizar tambeacutem o bind_varsX = 32101 bind_vars(Y X) Y= Y + 321X = 321009999999999991Y = 642009999999999991yes

Outros predicados uacuteteis var nonvar (retorna yes se a variaacutevel natildeoestiver livre) Exemplo( X = 7 nonvar(X) ) var(Y)

X = 7

yes nos dois casos eram true

Uma variaacutevel atribuiacuteda tem um mapa com um par de valores ligados aela o seu conteuacutedo(s) e estado (truefalse)

Ver manual alguns predicados especiacutecos para este m

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 43 61

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Atribuiccedilatildeo

X = 7 X = X + 7 X = X + 7

X = 21

A atribuiccedilatildeo tem um escopo local ao predicado em questatildeo

Eacute preciso ter cuidado com o que se deseja modicar e retornar

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 44 61

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Aacutetomo

Um aacutetomo eacute uma constante simboacutelica

Seu nome pode ser representado tanto com aspas simples ou sem

Tamanho de um aacutetomo le 1000 caracteres

Exemplos x_20 x_21 a a abacate etc

ab == ab (satildeo iguais)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 45 61

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Exemplo de aacutetomos

atom(x) atom(x) cuidar com atom(x) == atom(x)

atom_chars(x) = X

chr(68) = Valor

ord(D) = Valor inverso da anterior

digit(1) equiv no e digit(1) equiv yes

length(ufsc) = X

len(ufsc) = X

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 46 61

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Nuacutemeros

Um nuacutemero eacute um aacutetomo inteiro ou real

Um nuacutemero inteiro pode ser representado na forma decimal binaacuteriaoctal ou hexadecimal

Um nuacutemero real usa o ponto no lugar da viacutergula para separar osvalores depois de zero como 31415

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 47 61

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Exemplo de nuacutemeros inteiros e reais

X = 3 number(X)

X = 3 Y = 4 X lt Y

number_chars(45) = X

X = [45]

number_codes(45) = X

X = [5253]

real(54321)

int(321) equiv integer(321) satildeo predicados

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 48 61

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Layout

1 INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)

2 Introduccedilatildeo

3 CaracteriacutesticasInstalaccedilatildeoWebIDEUsando o Picat

4 ExemplosOutros detalhes

5 Tipos de dadosTipos simplesTipos compostos

6 Conclusatildeo

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 49 61

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Tipos compostos I

Lista sequecircncia de termos

L = [ a b c] length(L) = X

L = [ a b c] Llength = X

L = [ a b c] get(Llength) = X

Strings lista de caracteresX = Oi bom dia

X = [Oi bom dia]

X = Oi bom dia to_uppercase(X) = Y

Predicado string(X)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 50 61

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Tipos compostos II

Estrutura um modo de organizar dados heterogecircneos em um uacutenicotermo

Uma estrutura tem o formato $est(t1 t2 tn) ondeest eacute um aacutetomo e n eacute a aridade da estruturaO $ eacute usado para diferenciar uma estrutura de umafunccedilatildeo em um dos argumentos do predicado (sim umafunccedilatildeo pode ser um argumento de um predicado)Cuidados nos casamentos dos termos

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 51 61

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Tipos compostos III

1 =============================================================

2 main =gt

3 X1 = $carro($marca(fiat palio) $cor(azul) 2007)

4 X2 = $carro($marca(toyota ethios) $cor(prata) 2017)

5 X3 = $carro($marca(honda fit) $cor(branco) 2017)

6 L = [X1 X2 X3]

7 println(dado_completo = X1)

8 println(aridade = arity(X1))

9 println(nome_da_estrutura = name(X1))

10 println(todos_os_dados = L)

11 BUSCA DOS CARROS NOVOS

12 foreach (X in L)

13 novo_17(X)

14 end

15

16

17 novo_17( carro( marca(X W) Y Ano) ) =gt

18 Ano gt= 2017

19 printf(n Marca w || Modelo w || Cor w X W Y)

20 printf(n EH UM CARRO NOVO gt= 2017)

21

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 52 61

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Tipos compostos IV

22 novo_17( carro( marca(X W) cor(Y) Ano) ) =gt

23 Ano lt 2017

24 printf(n Marca w || Modelo w || Cor w X W Y)

25 printf(n NAO EH UM CARRO NOVO ANO w Ano)

26

27 =============================================================

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 53 61

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Tipos compostos V

Vetores Um vetor ou array tem o formato t1 tn o qual eacuteum caso especial de uma estrutura delimitada por earidade n

Tem seu comprimento delimitado na memoacuteria e tempode acesso constante a seus elementosAnaacutelogo aos vetores de outras linguagens com umanotaccedilatildeo e funccedilotildees bem faacuteceis de usar ExemploVetor[7] acessa a 7a posiccedilatildeo deste vetorunidimensionalPara criar um arraynew_array(D1 Dn) = Vetor onde D1 Dn

especicam as dimensotildees do mesmo Atualmenten le 10 (matrizes de 10 dimensotildees rArr mais do quesuciente)

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 54 61

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Tipos compostos VI

Como sua implementaccedilatildeo tem origem das listas eacute de seesperar que Listas hArr Vetores

Logo haacute muitas funccedilotildees e predicados de listas quefacilitam o tratamento com vetoresMas algumas estatildeo prontas apenas para vetoresunidimensionais Cuidado aqui Veja o exemplo parasuperar estas diculdades

Exemplo a seguir

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 55 61

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Tipos compostos VII

1 =============================================================

2 import os

3 import util

4 import math

5

6 main =gt Status = command(clear)

7 printf(====================================== d OK Status)

8 Matriz = f_Array_2D () funcao sem argumentos () obrigado

9 printf(n====================================== n)

10 printf(n Soma dos elementos dn f_soma_2D( Matriz ))

11 print_matriz(Matriz)

12 printf(n====================================== n)

13

14 main =gt printf(n Algo errado nas chamadas acima )

15

16 ----------------------------------------------------------

17 f_Array_2D () = Vetor =gt

18 new_array (32) = Vetor

19 Vetor = 34 56 78

20 printf(n Primeira linha w first(Vetor) )

21 printf(n Ultima linha w last(Vetor) )

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 56 61

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Tipos compostos VIII

22 printf(n Total de linhas i length(Vetor) )

23

24 ----------------------------------------------------------

25 f_soma_2D( M ) = Soma =gt

26 Linhas = Mlength Num de linhas

27 Soma = 0

28 foreach(I in 1 Linhas)

29 Soma = Soma + sum( M[I] ) sum APENAS PARA VETOR 1D

30 end

31 ----------------------------------------------------------

32 Imprimindo uma Matriz

33 print_matriz( M ) =gt

34 Linhas = Mlength Num de linhas

35 Colunas = M[1]length Num de colunas

36 nl

37 foreach(I in 1 Linhas)

38 foreach(J in 1 Colunas)

39 printf(w M[IJ] )

40 end

41 nl

42 end

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 57 61

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Tipos compostos IX

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 58 61

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Tipos compostos I

Conjuntos e

Mapas

Link para os coacutedigoshttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_sourceszip

Para conhecer maishttpswwwinfufscbr~alexandregoncalvessilva

coursesdocspicat_slidespdf

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 59 61

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Conclusatildeo

Picat eacute uma linguagem nova (2013) ainda desconhecidasupostamente revolucionaacuteria e com um futuro promissor

Atualmente haacute pouco material disponiacutevel e uma comunidade pequenade usuaacuterios

Interface simples e eciente a problemas NP-Completosplanejamento programaccedilatildeo por restriccedilotildees e programaccedilatildeo dinacircmica

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 60 61

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo

Referecircncias

User guide no diretoacuterio doc da instalaccedilatildeo em LATEX

User guide on-linerArr httppicat-langorg

GitHub do Prof ClaudiorArr httpsgithubcomclaudiosaCCStreemasterpicat

Foacuterum do Picat (em inglecircs)

Site do Hakan KjellerstrandrArr httpwwwhakankorgpicat

Site do Roman BartaacutekrArr httpktimlmffcunicz~bartak

Site do Sergii DimychenkorArr httpsdymchenkocomblog20150131ai-planning-picat

Prof A G Silva (UFSC) Programaccedilatildeo em Loacutegica 09-novembro-2017 61 61

  • INE5416 Paradigmas de Programaccedilatildeo (Loacutegico)
  • Introduccedilatildeo
  • Caracteriacutesticas
    • Instalaccedilatildeo
    • WebIDE
    • Usando o Picat
      • Exemplos
        • Outros detalhes
          • Tipos de dados
            • Tipos simples
            • Tipos compostos
              • Conclusatildeo