Advertisement
Guest User

Untitled

a guest
Jan 16th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.75 KB | None | 0 0
  1. :- consult(mondo_aspirapolvere).
  2. :- consult(pianificatore_aspirapolvere).
  3. :- consult('rrs/decisore_ci').
  4. :- consult(utilities).
  5. :- multifile([type/1, pred/1, local_pred/1, open_pred/1, skipped/1, user_unit/1]).
  6.  
  7. :- maplist(writeln,
  8. ['***** Aspirapolvere con conoscenza completa *****',
  9. 'USARE:',
  10. '********************************************************']).
  11.  
  12. user_unit(aspirapolvere).
  13. % unitΓ  che governa la "vita" dell'aspirapolvere usando
  14. % l'RRS decisore (in 'rrs/decisore.pl').
  15. % Usa (importa) i tipi e i predicati definiti in mondo_aspirapolvere
  16. %
  17. % import_type(mondo_aspirapolvere:action).
  18. % action, le azioni del mondo aspirapolvere+appartamento da pulire
  19. % import_type(mondo_aspirapolvere:luogo).
  20. % i luoghi, stanze e balcone
  21. % import_pred(mondo_aspirapolvere:sporco(luogo,number)).
  22. % lo sporco nei luaoghi
  23. % import_pred(mondo_aspirapolvere:esecuzione(action)).
  24. % il mondo delle stanze da puire ed esecuzione
  25. % effettiva delle azioni dell'agente nel mondo
  26. %
  27. % Usa il predicato
  28. % piano(decisione_complessa, list(action), number)).
  29. % di pianificatore_aspirapolvere
  30.  
  31. start :- decisore(attesa).
  32.  
  33. type([attesa, pulizia]:state).
  34. % chiudo il tipo state; l'aspirapolvere attende di essere risvegliato
  35. % in stato attesa ed procede a far pulizia nello stato pulizia;
  36. % quando non ci sono stanze sporche torna in attesa
  37. type([esegui_pulizia]:decisione_complessa).
  38. % chiudo decisione_compessa con l'unica decisione esegui_pulizia
  39. % (pulire tutte le stanze e svuotare tutto lo sporco)
  40.  
  41.  
  42.  
  43. type([avvio_pulizia]:event).
  44. % evento scatenato dal calendario delle pulizie
  45. local_pred(event(event)).
  46. % event(E) : Γ¨ avvenuto E
  47. % MODO: predicato che resta in attesa di eventi
  48. % implementato con readln
  49.  
  50. decidi(riparti, esegui_pulizia) :- !.
  51. decidi(attesa, do([sveglia])) :- !,
  52. event(avvio_pulizia).
  53. decidi(pulizia, do([dormi])) :-
  54. not((sporco(_,Q), Q>0)), !.
  55. decidi(pulizia, esegui_pulizia) :- !.
  56. decidi(interr(_, _, _, _), va_a_versare) :- !.
  57. decidi(D,_) :-
  58. writeln("??????????-----":D), fail.
  59.  
  60.  
  61. pianifica(esegui_pulizia, _, Plan, Time) :-
  62. piano(esegui_pulizia, Plan, Time).
  63.  
  64. tratta_decisione_impossibile(_,_,_) :-
  65. throw('Quacosa non va, non sono previste decisioni impossibili').
  66.  
  67.  
  68. do_action(sveglia,attesa,pulizia) :-
  69. esecuzione(sveglia).
  70. do_action(dormi, pulizia, attesa) :-
  71. esecuzione(dormi).
  72. do_action(va(S), pulizia, pulizia) :-
  73. esecuzione(va(S)).
  74. do_action(versa_sporco, pulizia, pulizia) :-
  75. esecuzione(versa_sporco).
  76. do_action(pulisci(Q), pulizia, pulizia) :-
  77. esecuzione(pulisci(Q)).
  78. do_action(va_a_versare, _, riparti) :-
  79. esecuzione(va_a_versare).
  80.  
  81. event(avvio_pulizia) :-
  82. write('\n************* EVENTO avvio pulizia : '),
  83. read_command.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement