Skip to content

Latest commit

 

History

History
110 lines (82 loc) · 2.76 KB

controlefluxo.org

File metadata and controls

110 lines (82 loc) · 2.76 KB

Controle de Fluxo

1 Controle de Fluxo

Ambiente de programação lógica \alert{pura}

  • Ordem de resolução de cláusulas é indeterminada
  • As combinações poderiam ser testadas \alert{em paralelo}

Em Prolog, a resolução é \alert{determinista}

  • De cima para baixo
  • Da esquerda para a direita

Podemos afetar o desempenho do motor de inferência

  • Reordenar as cláusulas para otimizar um tipo de consulta
  • Colocar as cláusulas mais “verdadeiras” primeiro

Laços infinitos podem ser evitados

2 Operador de Corte: !

Motor de Inferência

  • Faz uma busca exaustiva para encontrar todas as verdades
  • Ao encontrar falso, faz um retrocesso, e continua
pais(brasil).
cidade(brasilia).
capital(brasil, brasilia).
capital(brasil, brasilia).
capital_pais(X,Y) :- pais(X), cidade(Y), capital(X,Y).

Pergunta: capital_pais(brasil,X). nos traz o que? ./corta_01.pl

Operador ! retorna sempre verdadeiro, mas desabilita retrocesso anterior.

Vejamos o caso do arquivo: ./corta_02.pl

3 Operador de Corte: !

Um exemplo geral

a, b, !, c, d

Se a e b são verdade, mas c não, tudo é falso, ou seja

o corte pode ser utilizado para explicitar que

não vale a pena reavaliar a e b

4 Controle de Fluxo

Desvantagens do operador de corte?

  • Influência do modelo imperativo
  • Analogia ao uso de goto

Prolog é impuro pois tem resolução determinista

  • Reordernar cláusulas
  • Utilizar o corte para controlar o processo de busca

Principal razão: Eficiência