Post on 17-Apr-2015
1
Aula 11Aula 11Linguagens DeclarativasLinguagens Declarativas
eeMultiparadigmaMultiparadigma
Universidade do Vale do Rio dos Sinos
< Página da Disciplina >
www.inf.unisinos.br/~barbosawww.inf.unisinos.br/~barbosa
<Endereço do Professor >
barbosa@exatas.unisinos.brbarbosa@exatas.unisinos.br
2
1 – Abordagem do Sebesta para Funcionais
SumárioSumário
3
1 – Abordagem do Sebesta para Funcionais2 – Abordagem do Sebesta para Lógicas
SumárioSumário
4
1 – Abordagem do Sebesta para Funcionais2 – Abordagem do Sebesta para Lógicas3 – Implementação de Lógicas
SumárioSumário
5
1 – Abordagem do Sebesta para Funcionais2 – Abordagem do Sebesta para Lógicas3 – Implementação de Lógicas4 – Implementação de Funcionais
SumárioSumário
6
1 – Abordagem do Sebesta para Funcionais2 – Abordagem do Sebesta para Lógicas3 – Implementação de Lógicas4 – Implementação de Funcionais5 – Proposta do Holo
SumárioSumário
7
1 – Abordagem do Sebesta para Funcionais2 – Abordagem do Sebesta para Lógicas
3 – Implementação de Lógicas4 – Implementação de Funcionais5 – Proposta do Holo
SumárioSumário
8
1 – Abordagem do Sebesta para Funcionais - Introdução - Funções matemáticas - Fundamentos da linguagens funcionais - LISP (1970) - Scheme (dialeto LISP, 1975) - Common LISP (1980) - ML (1990) - Haskell (1996) - Aplicações da funcionais - Comparação entre funcionais e imperativas
SumárioSumário
9
1 – Abordagem do Sebesta para Funcionais2 – Abordagem do Sebesta para Lógicas - Introdução - Cálculo de predicados - Demonstração de teoremas - Visão geral da programação em lógica - Origens do Prolog - Elementos básicos do Prolog - Deficiências do Prolog - Aplicações da programação em lógica
SumárioSumário
10
1 – Abordagem do Sebesta para Funcionais2 – Abordagem do Sebesta para Lógicas3 – Implementação de Lógicas
SumárioSumário
11
1 – Abordagem do Sebesta para Funcionais2 – Abordagem do Sebesta para Lógicas3 – Implementação de Lógicas
SumárioSumário
12
ImplementaçãoImplementação• Warren’s Abstract Machine (WAM) David Warren , 1983
13
ImplementaçãoImplementação• Warren’s Abstract Machine (WAM) David Warren , 1983• Máquina Abstrata: - Representação de dados - Instruções de máquina
14
ImplementaçãoImplementação• Warren’s Abstract Machine (WAM) David Warren , 1983• Máquina Abstrata: - Representação de dados - Instruções de máquina• Arquitetura da WAM
15
ImplementaçãoImplementação• Warren’s Abstract Machine (WAM) David Warren , 1983• Máquina Abstrata: - Representação de dados - Instruções de máquina• Arquitetura da WAM
16
Arquitetura da WAMArquitetura da WAM
LOW
HIGH
17
Arquitetura da WAMArquitetura da WAM
Code AreaLOW
HIGH
Opcodes
18
Arquitetura da WAMArquitetura da WAM
Code Area
HEAP
LOW
HIGH
Células contendovariáveis, estruturas e constantes
Opcodes
19
Arquitetura da WAMArquitetura da WAM
Code Area
HEAP
STACK
LOW
HIGH
Pontos de Escolha e Ambientes
Opcodes
Células contendovariáveis, estruturas e constantes
20
Arquitetura da WAMArquitetura da WAM
Code Area
HEAP
STACK
TRAIL
LOW
HIGH
Variáveis que devemser desligadas no backtracking
Pontos de Escolha e Ambientes
Opcodes
Células contendovariáveis, estruturas e constantes
21
Arquitetura da WAMArquitetura da WAM
Code Area
HEAP
STACK
TRAIL
PDL
LOW
HIGHPush Down ListPilha usada pelo algoritmo de unificação
Variáveis que devemser desligadas no backtracking
Pontos de Escolha e Ambientes
Opcodes
Células contendovariáveis, estruturas e constantes
22
Arquitetura da WAMArquitetura da WAM
Code Area
HEAP
STACK
TRAIL
PDL
LOW
HIGH
REGISTRADORES
23
Arquitetura da WAMArquitetura da WAM
Code Area
HEAP
STACK
TRAIL
PDL
LOW
HIGH
REGISTRADORES
Registradoresde
Argumentos
A1A2A3.........An
24
Arquitetura da WAMArquitetura da WAM
Code Area
HEAP
STACK
TRAIL
PDL
LOW
HIGH
Registradoresde
Argumentos
A1A2A3.........An
REGISTRADORES
RegistradoresTemporários
X1X2X3.........Xn
25
ImplementaçãoImplementação• Warren’s Abstract Machine (WAM) David Warren , 1983• Máquina Abstrata: - Representação de dados - Instruções de máquina• Arquitetura da WAM• Representação de dados e compilação
26
ImplementaçãoImplementação• Warren’s Abstract Machine (WAM) David Warren , 1983• Máquina Abstrata: - Representação de dados - Instruções de máquina• Arquitetura da WAM• Representação de dados e compilação
27
Arquitetura da WAMArquitetura da WAM
Code Area
HEAP
STACK
TRAIL
PDL
LOW
HIGH
28
Arquitetura da WAMArquitetura da WAM
Code Area
HEAP
STACK
TRAIL
PDL
LOW
HIGH
p(Z,h(Z,W),f(W))
29
Arquitetura da WAMArquitetura da WAM
Code Area
HEAP
STACK
TRAIL
PDL
LOW
HIGH
p(Z,h(Z,W),f(W))
STR 1
h / 2
REF 2
REF 3
0
12
3
30
Arquitetura da WAMArquitetura da WAM
Code Area
HEAP
STACK
TRAIL
PDL
LOW
HIGH
p(Z,h(Z,W),f(W))
STR 1
h / 2
REF 2
REF 3
STR 5
f / 1
REF 3
0
12
3
4
5
6
31
Arquitetura da WAMArquitetura da WAM
Code Area
HEAP
STACK
TRAIL
PDL
LOW
HIGH
p(Z,h(Z,W),f(W))
STR 1
h / 2
REF 2
REF 3
STR 5
f / 1
REF 3
STR 8
p / 3
REF 2
STR 1
STR 5
0
12
3
4
5
6
78
9
10
11
32
Arquitetura da WAMArquitetura da WAM
Code Area
HEAP
STACK
TRAIL
PDL
LOW
HIGH
?- p(Z,h(Z,W),f(W)).
33
Arquitetura da WAMArquitetura da WAM
Code Area
HEAP
STACK
TRAIL
PDL
LOW
HIGH
1. put_variable Xi,Ai2. put_structure f/n,Ai3. set_variable Xi4. set_value Xi5. call f/n
?- p(Z,h(Z,W),f(W)).
34
Arquitetura da WAMArquitetura da WAM
Code Area
HEAP
STACK
TRAIL
PDL
LOW
HIGH
put_variable X4,A1put_structure h/2,A2set_value X4set_variable X5put_structure f/1,A3set_value X5call p/3
?- p(Z,h(Z,W),f(W)).
1. put_variable Xi,Ai2. put_structure f/n,Ai3. set_variable Xi4. set_value Xi5. call f/n
35
?- p(Z,h(Z,W),f(W)).
put_variable X4,A1put_structure h/2,A2set_value X4set_variable X5put_structure f/1,A3set_value X5call p/3
36
REF 0 0
?- p(Z,h(Z,W),f(W)).
put_variable X4,A1put_structure h/2,A2set_value X4set_variable X5put_structure f/1,A3set_value X5call p/3
A1
X4
37
?- p(Z,h(Z,W),f(W)).REF 0 0
?- p(Z,h(Z,W),f(W)).
put_variable X4,A1put_structure h/2,A2set_value X4set_variable X5put_structure f/1,A3set_value X5call p/3
A1
X4 h / 2
A2
1
38
?- p(Z,h(Z,W),f(W)).?- p(Z,h(Z,W),f(W)).REF 0 0
?- p(Z,h(Z,W),f(W)).
put_variable X4,A1put_structure h/2,A2set_value X4set_variable X5put_structure f/1,A3set_value X5call p/3
A1
X4 h / 2
A2
1
REF 0 3
39
?- p(Z,h(Z,W),f(W)).?- p(Z,h(Z,W),f(W)).REF 0 0
?- p(Z,h(Z,W),f(W)).
put_variable X4,A1put_structure h/2,A2set_value X4set_variable X5put_structure f/1,A3set_value X5call p/3
A1
X4 h / 2
A2
1
REF 0 2
REF 3 3X5
40
?- p(Z,h(Z,W),f(W)).?- p(Z,h(Z,W),f(W)).REF 0 0
?- p(Z,h(Z,W),f(W)).
put_variable X4,A1put_structure h/2,A2set_value X4set_variable X5put_structure f/1,A3set_value X5call p/3
A1
X4 h / 2
A2
1
REF 0 2
REF 3 3X5 f / 1 4A3
41
?- p(Z,h(Z,W),f(W)).?- p(Z,h(Z,W),f(W)).REF 0 0
?- p(Z,h(Z,W),f(W)).
put_variable X4,A1put_structure h/2,A2set_value X4set_variable X5put_structure f/1,A3set_value X5call p/3
A1
X4 h / 2
A2
1
REF 0 2
REF 3 3X5 f / 1 4A3 REF 3 5
42
?- p(Z,h(Z,W),f(W)).?- p(Z,h(Z,W),f(W)).REF 0 0
?- p(Z,h(Z,W),f(W)).
put_variable X4,A1put_structure h/2,A2set_value X4set_variable X5put_structure f/1,A3set_value X5call p/3
A1
X4 h / 2
A2
1
REF 0 2
REF 3 3X5 f / 1 4A3 REF 3 5
43
?- p(Z,h(Z,W),f(W)).?- p(Z,h(Z,W),f(W)).REF 0 0
?- p(Z,h(Z,W),f(W)).
put_variable X4,A1put_structure h/2,A2set_value X4set_variable X5put_structure f/1,A3set_value X5call p/3
A1
X4 h / 2
A2
1
REF 0 2
REF 3 3X5 f / 1 4A3 REF 3 5
44
?- p(Z,h(Z,W),f(W)).?- p(Z,h(Z,W),f(W)).REF 0 0
?- p(Z,h(Z,W),f(W)
put_variable X4,A1put_structure h/2,A2set_value X4set_variable X5put_structure f/1,A3set_value X5call p/3
A1
X4 h / 2
A2
1
REF 0 2
REF 3 3X5 f / 1 4A3 REF 3 5
45
?- p(Z,h(Z,W),f(W)).?- p(Z,h(Z,W),f(W)).REF 0 0
?- p(Z,h(Z,W),f(W)).
put_variable X4,A1put_structure h/2,A2set_value X4set_variable X5put_structure f/1,A3set_value X5call p/3
A1
X4 h / 2
A2
1
REF 0 2
REF 3 3X5 f / 1 4A3 REF 3 5
Procedimento p/3na área de código
46
Arquitetura da WAMArquitetura da WAM
Code Area
HEAP
STACK
TRAIL
PDL
LOW
HIGH
p(f(X),h(Y,f(a)),Y).
47
Arquitetura da WAMArquitetura da WAM
Code Area
HEAP
STACK
TRAIL
PDL
LOW
HIGH
1. get_structure f/n,Xi2. unify_variable Xi3. unify_value Xi4. get_value Xn,Na5. unify_constant C6. proceed
p(f(X),h(Y,f(a)),Y).
48
Arquitetura da WAMArquitetura da WAM
Code Area
HEAP
STACK
TRAIL
PDL
LOW
HIGH
p(f(X),h(Y,f(a)),Y).1. get_structure f/n,Xi2. unify_variable Xi3. unify_value Xi4. get_value Xn,Na5. unify_constant C6. proceed
p/3: get_structure f/1,A1 unify_variable X4 get_structure h/2,A2 unify_variable X5 unify_variable X6 get_value X5,A3 get_structure f/1,X6 unify_constant a proceed
49
?- p(Z,h(Z,W),f(W)).
p(f(X),h(Y,f(a)),Y).
50
?- p(Z,h(Z,W),f(W)).
p(f(X),h(Y,f(a)),Y).
REF 0 0A1h / 2
A2
1
REF 0 2
REF 3 3
f / 1 4A3 REF 3 5
51
?- p(Z,h(Z,W),f(W)).
p(f(X),h(Y,f(a)),Y).
REF 0 0A1h / 2
A2
1
REF 0 2
REF 3 3
f / 1 4A3 REF 3 5
p/3: get_structure f/1,A1 unify_variable X4 get_structure h/2,A2 unify_variable X5 unify_variable X6 get_value X5,A3 get_structure f/1,X6 unify_constant a proceed
52
?- p(Z,h(Z,W),f(W)).
p(f(X),h(Y,f(a)),Y).
REF 0 -> 6 0A1h / 2
A2
1
REF 0 2
REF 3 3
f / 1 4A3 REF 3 5
p/3: get_structure f/1,A1 unify_variable X4 get_structure h/2,A2 unify_variable X5 unify_variable X6 get_value X5,A3 get_structure f/1,X6 unify_constant a proceed
STR 7 6
f / 1 7
53
?- p(Z,h(Z,W),f(W)).
p(f(X),h(Y,f(a)),Y).
REF 0 -> 6 0A1h / 2
A2
1
REF 0 2
REF 3 3
f / 1 4A3 REF 3 5
p/3: get_structure f/1,A1 unify_variable X4 get_structure h/2,A2 unify_variable X5 unify_variable X6 get_value X5,A3 get_structure f/1,X6 unify_constant a proceed
STR 7 6
f / 1 7
REF 8 8X4
54
?- p(Z,h(Z,W),f(W)).
p(f(X),h(Y,f(a)),Y).
REF 0 -> 6 0A1h / 2
A2
1
REF 0 2
REF 3 3
f / 1 4A3 REF 3 5
p/3: get_structure f/1,A1 unify_variable X4 get_structure h/2,A2 unify_variable X5 unify_variable X6 get_value X5,A3 get_structure f/1,X6 unify_constant a proceed
STR 7 6
f / 1 7
REF 8 8X4
55
?- p(Z,h(Z,W),f(W)).
p(f(X),h(Y,f(a)),Y).
REF 0 -> 6 0A1h / 2
A2
1
REF 0 2
REF 3 3
f / 1 4A3 REF 3 5
p/3: get_structure f/1,A1 unify_variable X4 get_structure h/2,A2 unify_variable X5 unify_variable X6 get_value X5,A3 get_structure f/1,X6 unify_constant a proceed
STR 7 6
f / 1 7
REF 8 8X4
X5 REF 2
56
?- p(Z,h(Z,W),f(W)).
p(f(X),h(Y,f(a)),Y).
REF 0 -> 6 0A1h / 2
A2
1
REF 0 2
REF 3 3
f / 1 4A3 REF 3 5
p/3: get_structure f/1,A1 unify_variable X4 get_structure h/2,A2 unify_variable X5 unify_variable X6 get_value X5,A3 get_structure f/1,X6 unify_constant a proceed
STR 7 6
f / 1 7
REF 8 8X4
X5 REF 2
X6 REF 3
57
?- p(Z,h(Z,W),f(W)).
p(f(X),h(Y,f(a)),Y).
REF 0 -> 6 0A1h / 2
A2
1
REF 0 2
REF 3 3
f / 1 4A3 REF 3 5
p/3: get_structure f/1,A1 unify_variable X4 get_structure h/2,A2 unify_variable X5 unify_variable X6 get_value X5,A3 get_structure f/1,X6 unify_constant a proceed
STR 7
6
f / 1 7
REF 8 8X4
X5 REF 2
X6 REF 3
STR 7
58
?- p(Z,h(Z,W),f(W)).
p(f(X),h(Y,f(a)),Y).
REF 0 -> 6 0A1h / 2
A2
1
REF 0 2
REF 3 3
f / 1 4A3 REF 3 5
p/3: get_structure f/1,A1 unify_variable X4 get_structure h/2,A2 unify_variable X5 unify_variable X6 get_value X5,A3 get_structure f/1,X6 unify_constant a proceed
STR 7
6
f / 1 7
REF 8 8X4
X5 REF 2
X6 REF 3
STR 7
unify X5,A3
59
?- p(Z,h(Z,W),f(W)).
p(f(X),h(Y,f(a)),Y).
REF 0 -> 6 0A1h / 2
A2
1
REF 0 2
REF 3 3
f / 1 4A3 REF 3 5
p/3: get_structure f/1,A1 unify_variable X4 get_structure h/2,A2 unify_variable X5 unify_variable X6 get_value X5,A3 get_structure f/1,X6 unify_constant a proceed
STR 7
6
f / 1 7
REF 8 8X4
X5 REF 2
X6 REF 3
STR 7
unify X5,A3
60
?- p(Z,h(Z,W),f(W)).
p(f(X),h(Y,f(a)),Y).
REF 0 -> 6 0A1h / 2
A2
1
REF 0 2
REF 3 3
f / 1 4A3 REF 3 5
p/3: get_structure f/1,A1 unify_variable X4 get_structure h/2,A2 unify_variable X5 unify_variable X6 get_value X5,A3 get_structure f/1,X6 unify_constant a proceed
STR 7
6
f / 1 7
REF 8 8X4
X5 REF 2
X6 REF 3
STR 7
unify X5,A3
61
?- p(Z,h(Z,W),f(W)).
p(f(X),h(Y,f(a)),Y).
REF 0 -> 6 0A1h / 2
A2
1
REF 0 2
REF 3 3
f / 1 4A3 REF 3 5
p/3: get_structure f/1,A1 unify_variable X4 get_structure h/2,A2 unify_variable X5 unify_variable X6 get_value X5,A3 get_structure f/1,X6 unify_constant a proceed
STR 7
6
f / 1 7
REF 8 -> 3 8X4
X5 REF 2
X6 REF 3
STR 7
unify X5,A3
62
?- p(Z,h(Z,W),f(W)).
p(f(X),h(Y,f(a)),Y).
REF 0 -> 6 0A1h / 2
A2
1
REF 0 2
REF 3 -> 9 3
f / 1 4A3 REF 3 5
p/3: get_structure f/1,A1 unify_variable X4 get_structure h/2,A2 unify_variable X5 unify_variable X6 get_value X5,A3 get_structure f/1,X6 unify_constant a proceed
STR 7
6
f / 1 7
REF 8 - > 3 8X4
X5 REF 2
X6 REF 3
STR 7
9
f / 1 10
STR 10
63
?- p(Z,h(Z,W),f(W)).
p(f(X),h(Y,f(a)),Y).
REF 0 -> 6 0A1h / 2
A2
1
REF 0 2
REF 3 -> 9 3
f / 1 4A3 REF 3 5
p/3: get_structure f/1,A1 unify_variable X4 get_structure h/2,A2 unify_variable X5 unify_variable X6 get_value X5,A3 get_structure f/1,X6 unify_constant a proceed
STR 7
6
f / 1 7
REF 8 - > 3 8X4
X5 REF 2
X6 REF 3
STR 7
9
f / 1 10
STR 10
11 CON a
64
?- p(Z,h(Z,W),f(W)).
p(f(X),h(Y,f(a)),Y).
REF 0 -> 6 0A1h / 2
A2
1
REF 0 2
REF 3 -> 9 3
f / 1 4A3 REF 3 5
p/3: get_structure f/1,A1 unify_variable X4 get_structure h/2,A2 unify_variable X5 unify_variable X6 get_value X5,A3 get_structure f/1,X6 unify_constant a proceed
STR 7
6
f / 1 7
REF 8 - > 3 8X4
X5 REF 2
X6 REF 3
STR 7
9
f / 1 10
STR 10
11 CON a
Retorna para local da chamadaInstanciações resultantes: Z = f(f(a)) e W = f(a)
65
Código gerado para uma cláusulaCódigo gerado para uma cláusula
p(X,Y) :- q(X,Z), r(Z,Y).
p/2 : allocate 2 get_variable X3,A1 get_variable Y1,A2 put_value X3,A1 put_variable Y2,A2 call q/2 put_variable Y2,A1 put_value Y1,A2 call r/2 deallocate
66
Código gerado para uma cláusulaCódigo gerado para uma cláusula
p(X,Y) :- q(X,Z), r(Z,Y).
p/2 : allocate 2 get_variable X3,A1 get_variable Y1,A2 put_value X3,A1 put_variable Y2,A2 call q/2 put_variable Y2,A1 put_value Y1,A2 call r/2 deallocate
67
1 – Abordagem do Sebesta para Funcionais2 – Abordagem do Sebesta para Lógicas3 – Implementação de Lógicas4 – Implementação de Funcionais - Normalmente utilizam máquinas abstratas - Normalmente máquinas baseadas em redução de grafos - G-Machine
SumárioSumário
68
1 – Abordagem do Sebesta para Funcionais2 – Abordagem do Sebesta para Lógicas3 – Implementação de Lógicas4 – Implementação de Funcionais - Normalmente utilizam máquinas abstratas - Normalmente máquinas baseadas em redução de grafos - G-Machine
SumárioSumário
69
G-MachineG-Machine
Compilador
G-Machine(run-time)
Definições de funções (programa)
Programa em G-Code
70
1 – Abordagem do Sebesta para Funcionais2 – Abordagem do Sebesta para Lógicas3 – Implementação de Lógicas4 – Implementação de Funcionais - Normalmente utilizam máquinas abstratas - Normalmente máquinas baseadas em redução de grafos - G-Machine - Linguagem Fun
SumárioSumário
71
Linguagem FunLinguagem Fun
Compilador que gera G-Code
(escrito em Haskell)
G-Machine(implementada em
Java)
Programa em Fun
Classes Java (G-Code)
JVM
72
1 – Abordagem do Sebesta para Funcionais2 – Abordagem do Sebesta para Lógicas3 – Implementação de Lógicas4 – Implementação de Funcionais5 – Proposta do Holo
SumárioSumário
73
HoloplataformaHoloplataforma
HoloJava
Programa em Holo
Classes Java
JavaCByte Code
JVM
Hardware + SO
• Imperativo• Lógica• Funcional• Concorrente
74
HoloplataformaHoloplataforma
HoloJava
Programa em Holo
Classes Java
JavaCByte Code
JVM
Hardware + SO
• Imperativo• Lógica• Funcional• Concorrente
HoloCompilerByte Code
HoloVM
Hardware + SO