:- use_module(library(pce)).
escribe(Texto):-
write(Texto).
comienzo(Valor):-
componente(Valor, Tipo),
resultado(Valor, Tipo),
nl, deshacer.
arranque:-
new(Dialogo, dialog('Adivinador de Componentes de PC')),
new(Uso1, menu('¿Es un componente interno o Externo?:', marked)),
/*Funciones Send*/
send(Dialogo, append, new(Nom, text_item('¿Cual es su nombre?'))),
send(Uso1, append, interno),
send(Uso1, append, externo),
send(Dialogo, append(Uso1)),
send(Dialogo, append, button('Continuar', and(
message(@prolog, escribe, Nom?selection),
message(@prolog, escribe, ' '),
message(@prolog, escribe, 'La Solucion se dio por:'),
message(@prolog, comienzo, Uso1?selection)))),
send(Dialogo, open).
componente(interno, ialmacena_tempo):-
ialmacena_tempo,!.
componente(interno, ialmacena_notempob):-
ialmacena_notempob,!.
componente(interno, ialmacena_notempod):-
ialmacena_notempod,!.
componente(interno, procesa):-
procesa,!.
componente(interno, pasaco):-
pasaco,!.
componente(interno, conjuga):-
conjuga,!.
componente(interno, pitido):-
pitido,!.
componente(interno, leeograbaf):-
leeograbaf,!.
componente(interno, leeograbalc):-
leeograbalc,!.
componente(interno, leeograbald):-
leeograbald,!.
componente(interno, leeograbaq):-
leeograbaq,!.
componente(interno, descono):-
descono,!.
componente(externo, lapizop):-
lapizop,!.
componente(externo, raton):-
raton,!.
componente(externo, teclado):-
teclado,!.
componente(externo, audifonos):-
audifonos,!.
componente(externo, bocinas):-
bocinas,!.
componente(externo, monitor):-
monitor,!.
componente(externo, escanner):-
escanner,!.
componente(externo, multifun):-
multifun,!.
componente(externo, impresora):-
impresora,!.
componente(externo, regulador):-
regulador,!.
componente(externo, nobreak):-
nobreak,!.
componente(externo, descono):-
descono,!.
ialmacena_tempo:- checa('¿hace esto?'), checa('¿hace el otro?'),!.
ialmacena_notempob:- checa('¿Almacena esto....?'), checa('¿Lo hace de manera No Temporal?'), checa('¿Guarda datos de la config del Hardware?'),!.
descono:- afirma('No es ninguno de estos'),!.
resultado(externo, descono):-
new(ResulD, dialog('Resultado:')),
new(L, label(resul, 'Desconocido')),
send(ResulD, append(L)),
new(B, button('Listo', and(message(ResulD, destroy), message(ResulD,free)))),
send(ResulD, append(B)),
send(ResulD, open).
.
.
.
.....
afirma(Tipo3):-
new(Dialogo3, dialog('Afirmacion: ')),
new(Texto, label(tipo,Tipo3)),
new(Byes, button(si,and(message(Dialogo3, return, si)))),
send(Dialogo3, append(Texto)),
send(Dialogo3, append(Byes)),
send(Dialogo3, default_button, si),
send(Dialogo3, open),
get(Dialogo3, confirm, Respuesta),
write(Respuesta),
write(' '),
send(Dialogo3,destroy),
((Respuesta==si)->assert(yes(Tipo3));
assert(no(Tipo3)),fail).
/*Pregunta*/
pregunta(Tipo2):-
new(Dialogo2, dialog('Pregunta: ')),
new(Texto, label(tipo,Tipo2)),
new(Byes, button(si,and(
message(Dialogo2, return, si)))),
new(Bno, button(no,and(message(Dialogo2, return, no)))),
send(Dialogo2, append(Texto)),
send(Dialogo2, append(Byes)),
send(Dialogo2, append(Bno)),
send(Dialogo2, default_button, si),
send(Dialogo2, open),
get(Dialogo2, confirm, Respuesta),
write(Respuesta),
write(' '),
send(Dialogo2,destroy),
((Respuesta==si)->assert(yes(Tipo2));
assert(no(Tipo2)),fail).
:-dynamic yes/1,no/1.
checa(Prop):-
(yes(Prop)->true;(no(Prop)->fail;
pregunta(Prop))).
/*deshacer todas las aserciones*/
deshacer:-retract(yes(_)),fail.
deshacer:-retract(no(_)),fail.
deshacer.