Advertisement
waydub12

bird.pro

Mar 19th, 2021
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.44 KB | None | 0 0
  1. % Start Konwledge Base
  2. /* Bird */
  3. bird(laysan_albatross):-
  4. family(albatross),
  5. color(white).
  6. bird(black_footed_albatross):-
  7. family(albatross),
  8. color(dark).
  9. bird(whistling_swan) :-
  10. family(swan),
  11. voice(muffled_musical_whistle).
  12. bird(trumpeter_swan) :-
  13. family(swan),
  14. voice(loud_trumpeting).
  15. bird(canada_goose):-
  16. family(goose),
  17. season(winter),
  18. country(united_states),
  19. head(black),
  20. cheek(white).
  21. bird(canada_goose):-
  22. family(goose),
  23. season(summer),
  24. country(canada),
  25. head(black),
  26. cheek(white).
  27. bird(mallard):-
  28. family(duck),
  29. voice(quack),
  30. head(green).
  31. bird(mallard):-
  32. family(duck),
  33. voice(quack),
  34. color(mottled_brown).
  35.  
  36. /* Order */
  37. order(tubenose) :-
  38. nostrils(external_tubular),
  39. live(at_sea),
  40. bill(hooked).
  41. order(waterfowl) :-
  42. feet(webbed),
  43. bill(flat).
  44.  
  45. /* Family */
  46. family(albatross) :-
  47. order(tubenose),
  48. size(large),
  49. wings(long_narrow).
  50. family(swan) :-
  51. order(waterfowl),
  52. neck(long),
  53. color(white),
  54. flight(ponderous).
  55.  
  56. /* Country */
  57. country(united_states):- region(mid_west).
  58. country(united_states):- region(south_west).
  59. country(united_states):- region(north_west).
  60. country(united_states):- region(mid_atlantic).
  61. country(canada):- province(ontario).
  62. country(canada):- province(quebec).
  63.  
  64. /* Region */
  65. region(new_england):-
  66. state(X),
  67. member(X, [massachusetts, vermont, ....]).
  68. region(south_east):-
  69. state(X),
  70. member(X, [florida, mississippi, ....]).
  71. % End Knowledge Base
  72.  
  73. % Start Native
  74. /* Asking the user */
  75. nostrils(X):- ask(nostrils, X).
  76. live(X):- ask(live, X).
  77. bill(X):- ask(bill, X).
  78. % size(X):- ask(size, X).
  79. wings(X):- ask(wings, X).
  80. color(X):- ask(color, X).
  81.  
  82. /* Menus for user */
  83. size(X):-
  84. menuask(size, X, [large, plump, medium, small]).
  85. flight(X):-
  86. menuask(flight, X, [ponderous, agile, flap_glide]).
  87.  
  88. /* Multi-valued answer */
  89. multivalued(voice).
  90. multivalued(feed).
  91.  
  92. /* Remembering the answer */
  93. ask(A, V):-
  94. known(yes, A, V), % succeed if true
  95. !. % stop looking
  96. ask(A, V):-
  97. known(_, A, V), % fail if false
  98. !,
  99. fail.
  100. ask(A, V):-
  101. write(A:V), % ask user
  102. write('? : '),
  103. read(Y), % get the answer
  104. asserta(known(Y, A, V)), % remember it
  105. Y == yes. % succeed or fail
  106. ask(A, V):-
  107. not(multivalued(A)),
  108. known(yes, A, V2),
  109. V \== V2,
  110. !,
  111. fail.
  112.  
  113. menuask(A, V, MenuList) :-
  114. write('What is the value for'), write(A), write('?'), nl,
  115. write(MenuList), nl,
  116. read(X),
  117. check_val(X, A, V, MenuList),
  118. asserta( known(yes, A, X) ),
  119. X == V.
  120.  
  121. check_val(X, _A, _V, MenuList) :-
  122. member(X, MenuList),
  123. !.
  124. check_val(X, A, V, MenuList) :-
  125. write(X), write(' is not a legal value, try again.'), nl,
  126. menuask(A, V, MenuList).
  127.  
  128. /* Simple shell */
  129. top_goal(X) :- bird(X).
  130.  
  131. solve :-
  132. abolish(known, 3),
  133. % define(known, 3),
  134. top_goal(X),
  135. write('The answer is '), write(X), nl.
  136. solve :-
  137. write('No answer found.'), nl.
  138.  
  139. /* Command loop */
  140. go :-
  141. greeting,
  142. repeat,
  143. write('> '),
  144. read(X),
  145. do(X),
  146. X == quit.
  147. greeting :-
  148. write('This is the Native Prolog shell.'), nl,
  149. write('Enter load, consult, or quit at the prompt.'), nl.
  150.  
  151. % Load Custom Knowledge Base
  152. do(load) :-
  153. load_kb,
  154. !.
  155.  
  156. % Running Program
  157. do(consult) :-
  158. solve,
  159. !.
  160.  
  161. % Quit Program
  162. do(quit).
  163. do(X) :-
  164. write(X),
  165. write('is not a legal command.'), nl,
  166. fail.
  167.  
  168. load_kb :-
  169. write('Enter file name: '),
  170. read(F),
  171. reconsult(F).
  172. % End Native
  173.  
  174. % Addition
  175. /* Member Rules */
  176. member(X,[X|_]).
  177. member(X,[_|T]):-member(X,T).
  178.  
  179. :- unknown(trace,fail).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement