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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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