%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% PROG. LOGICA, CONHECIMENTO E RACIOCINIO - MIEB/4

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% SEMANA 12: 03.DEZ.2012 - 07.DEZ.2012

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Regras de Producao

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% SICStus PROLOG: Desactivar diversos 'warnings'

:- set_prolog_flag( discontiguous_warnings,off ).
:- set_prolog_flag( single_var_warnings,off ).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% SICStus PROLOG: definicoes iniciais

:- op(800,fx,se).
:- op(700,xfx,entao).
:- op(500,xfy,ou).
:- op(400,xfy,e).
:- op(900,xfx,::).

:- dynamic facto/1.
:- dynamic '::'/2.

%--------------------------------- - - - - - - - - - -  -  -  -  -   -

(se enjoos e vomitos 
    entao 'dor de cabeca') :: 0.75.

(se vomitos e 'dor de estomago' 
    entao bebedeira) :: 0.50.

(se 'dor de cabeca' ou bebedeira 
    entao 'problemas intestinais') :: 0.35.

(se enjoos e 'dores lombares' e 'dor de rins'
    entao reumatismo) :: 0.20.

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Extensao do meta-predicado demo: QUESTAO,GRAU -> { V,F }

demo( Q,G ) :-
    facto( Q ) :: G.
demo( Q,G ) :-
    ( se C entao Q ) :: Gr,
    demo( C,Gc ),
    G is Gr * Gc.
demo( ( C1 e C2 ),G ) :-
    nonvar( C1 ), nonvar( C2 ),
    demo( C1,G1 ),
    demo( C2,G2 ),
    menor( G1,G2,G ).
demo((C1 ou C2),G) :-
    nonvar(C1),nonvar(C2),
    demo(C1,G1),
    demo(C2,G2),
    maior(G1,G2,G).
demo((C1 ou C2),G1) :-
    nonvar(C1),
    demo(C1,G1),
    nao(demo(C2,G2)).
demo((C1 ou C2),G2) :-
    nonvar(C2),
    demo(C2,G2),
    nao(demo(C1,G1)).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Extensao do predicado menor: X,Y,Z -> { V,F }

menor( X,Y,X ) :-
    X < Y.
menor( X,Y,Y ) :-
    X >= Y.

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Extensao do predicado maior: X,Y,Z -> { V,F }

maior( X,Y,X ) :-
    X > Y.
maior( X,Y,Y ) :-
    X =< Y.

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Extensao do meta-predicado nao: QUESTAO -> { V,F }

nao( QUESTAO ) :-
    QUESTAO, !, fail.
nao( QUESTAO ).

