% ILP-503 (Prof. Dr. Silvio do Lago Pereira)

% ---------------------------------------------------------------------
% EXEMPLO 1
% ---------------------------------------------------------------------

% bin.pl

% fatos

  bit(0).
  bit(1).

% regra

  bin(N) :-
     N = [A, B],
     bit(A),
     bit(B).

% ---------------------------------------------------------------------
% EXEMPLO 3
% ---------------------------------------------------------------------

% mapa.pl

cor(azul).
cor(verde).
cor(amarelo).
cor(vermelho).

coloração(S) :-
  S = [a:A, b:B, c:C, d:D, e:E],
  cor(A),
  cor(B),
  cor(C),
  cor(D),
  cor(E),
  A \= B, A \= C, A \= D,
  B \= C, B \= E,
  C \= D, C \= E,
  D \= E.

% ---------------------------------------------------------------------
% EXEMPLO 4
% ---------------------------------------------------------------------

% cruzadas.pl

palavra([t,u]).
palavra([o,i]).
palavra([o,c,a]).
palavra([t,i,a]).
palavra([o,l,h,o]).

cruzadas(S) :-
   S = [[A, B, C, D],
        [*, *, *, E],
        [*, F, G, H],
        [*, I, *, *]],
   palavra([A,B,C,D]),
   palavra([F,G,H]),
   palavra([D,E,H]),
   palavra([F,I]),
   [F,G,H] \= [D,E,H].

% ---------------------------------------------------------------------
% EXEMPLO 5
% ---------------------------------------------------------------------

% rotas.pl

vôo(1, a, b).
vôo(2, b, c).
vôo(3, b, d).
vôo(4, b, e).
vôo(5, c, a).
vôo(6, c, d).
vôo(7, d, e).
vôo(8, e, b).

rota(X, X, []).
rota(X, Z, [N|R]) :-
   vôo(N, X, Y),
   length(R, _ ),
   rota(Y, Z, R).

% ---------------------------------------------------------------------
% EXEMPLO 7
% ---------------------------------------------------------------------

input_number(Prompt, Number) :-
    prompt1(Prompt),
    read_line_to_string(user_input, String),
    number_string(Number, String).

% ---------------------------------------------------------------------
% EXERCICIO 9
% ---------------------------------------------------------------------

média :-
   input_number('Quantidade de números? ', N),
   length(L, N),
   maplist(input_number('Número? '), L),
   sumlist(L, S),
   format('A média é ~1f\n', [S/N]).

% ---------------------------------------------------------------------
% EXEMPLO 9
% ---------------------------------------------------------------------

:- use_module(library(pce)).

consulta :-
    new(D, dialog('Consulta')),
    send(D, append, new(C, int_item(código))),
    send(D, append, new(N, text_item(nome))),
    send(D, append, button(busca, message(@prolog, busca, C?selection, N))),
    send(D, append, button(ok, and(message(C, clear), message(N, clear)))),
    send(D, open).

busca(Código, N) :-
    (   cliente(Código, Nome)
    ->  send(N, selection, Nome)
    ;   send(N, selection, inexistente) ).

cliente(102, 'Cátia Telles').
cliente(295, 'Ana Teixeira').
cliente(561, 'Beatriz Lira').
