waydub12

os.pro

Mar 19th, 2021 (edited)
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.11 KB | None | 0 0
  1. % Start Rules (Knowledge Base)
  2. /* Knowledge Base */
  3. os(ios):-
  4. fear_technology(yes),
  5. daddy_reach(yes).
  6. os(chrome):-
  7. fear_technology(yes),
  8. daddy_reach(no).
  9. os(windows):-
  10. fear_technology(no),
  11. care_privacy(no).
  12. os(ubuntu):-
  13. fear_technology(no),
  14. care_privacy(yes),
  15. have_life(yes).
  16. os(kali):-
  17. fear_technology(no),
  18. care_privacy(yes),
  19. have_life(no).
  20. % End Rules (Knowledge Base)
  21.  
  22. % Start User Interface
  23. /* Asking the user */
  24. fear_technology(X):-
  25. menuask(fear_technology, X, [yes, no]).
  26. daddy_reach(X):-
  27. menuask(daddy_reach, X, [yes, no]).
  28. care_privacy(X):-
  29. menuask(care_privacy, X, [yes, no]).
  30. have_life(X):-
  31. menuask(have_life, X, [yes, no]).
  32.  
  33. /* Menus for user & Remembering the answer*/
  34. menuask(A, V, _):-
  35. known(yes, A, V), % succeed if true
  36. !. % stop looking
  37. menuask(A, V, _):-
  38. known(_, A, V), % fail if false
  39. !,
  40. fail.
  41. menuask(A, V, MenuList) :-
  42. write('Do you '), write(A), write('?'), nl,
  43. write(MenuList), nl,
  44. read(X),
  45. check_val(X, A, V, MenuList),
  46. asserta( known(yes, A, X) ),
  47. X == V.
  48.  
  49. /* Check input */
  50. check_val(X, _A, _V, MenuList) :-
  51. member(X, MenuList),
  52. !.
  53. check_val(X, A, V, MenuList) :-
  54. write(X), write(' is not a legal value, try again.'), nl,
  55. menuask(A, V, MenuList).
  56.  
  57. /* Member rules */
  58. member(X,[X|_]).
  59. member(X,[_|T]):-member(X,T).
  60. % End User Interface
  61.  
  62. % Start Simple Shell
  63. /* Simple shell */
  64. top_goal(X) :- os(X).
  65.  
  66. solve :-
  67. abolish(known, 3),
  68. top_goal(X),
  69. write('The answer is '), write(X), nl.
  70. solve :-
  71. write('No answer found.'), nl.
  72.  
  73. /* Command loop */
  74. go :-
  75. greeting,
  76. repeat,
  77. write('> '),
  78. read(X),
  79. do(X),
  80. X == quit.
  81.  
  82. greeting :-
  83. write('This is the Choosing an OS Prolog Exsys.'), nl,
  84. write('Enter start or quit at the prompt.'), nl.
  85.  
  86. /* Running Program */
  87. do(start) :-
  88. solve,
  89. !.
  90.  
  91. /* Quit Program */
  92. do(quit).
  93. do(X) :-
  94. write(X),
  95. write('is not a legal command.'), nl,
  96. fail.
  97. % End Simple Shell
  98.  
  99. /* handle undefined procedure */
  100. :- unknown(trace, fail).
Add Comment
Please, Sign In to add comment