1 Aula 11 Linguagens Declarativas eMultiparadigma Universidade do Vale do Rio dos Sinos barbosa...

Post on 17-Apr-2015

104 views 0 download

Transcript of 1 Aula 11 Linguagens Declarativas eMultiparadigma Universidade do Vale do Rio dos Sinos barbosa...

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