Advertisement
Guest User

Untitled

a guest
Mar 25th, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.00 KB | None | 0 0
  1. likes(tom,book).
  2. likes(pam,fish).
  3. likes(ann, apple).
  4. likes(ann, cat).
  5. likes(ann, flower).
  6. likes(bob, apple).
  7. likes(bob, cat).
  8. likes(bob, flower).
  9. likes(pem, apple).
  10. likes(pem, cat).
  11. likes(pem, phone).
  12. :-dynamic likesInfo/2.
  13. changeDB(X,Y) :-
  14. (retract(likesInfo(X, C)); C = 0),
  15. C1 is C + 1,
  16. assertz(likesInfo(X, C1)).
  17. existBetter(X):-
  18. likesInfo(X,C), likesInfo(X1,C1), C1 > C.
  19. mostResembling(L):-
  20. forall(likes(X, Y), changeDB(X,Y)),
  21. findall(X, (likesInfo(X, _), not(existBetter(X))), L),
  22. retractall(likesInfo(_,_)).
  23.  
  24. % Поиск пары персон с наибольшим числом общих предпочтений
  25. most_resembling( Person1, Person2 ) :-
  26. pair_prefs( ['$pair_prefs'( Common_Things, Person1, Person2 ) | L ] ),
  27. print( L ).
  28.  
  29. :- dynamic seen/2.
  30.  
  31. %
  32. likes( tom, book ).
  33. likes( pam, fish ).
  34. likes( ann, apple ).
  35. likes( ann, cat ).
  36. likes( ann, flower ).
  37. likes( bob, apple ).
  38. likes( bob, cat ).
  39. likes( bob, flower ).
  40. likes( pem, apple ).
  41. likes( pem, cat ).
  42. likes( pem, phone ).
  43.  
  44. % Поиск всех пар персон с любым количеством общих предпочтений
  45. pair_prefs( Prefs1 ) :-
  46. persons( Persons ),
  47. things( Persons, PThings_List ),
  48. bagof( '$pair_prefs'( Common_Things, Person1, Person2 ) ),
  49. Things1^Things2^Person1^Person2^(
  50. person_things( Persons, PThings_List, Person1, Things1 ),
  51. person_things( Persons, PThings_List, Person2, Things2 ),
  52. is_valid_pair( Person1, Person2 ),
  53. record_seen( Person1, Person2 ),
  54. intersection( Things1, Things2, Common_Things )
  55. ),
  56. Prefs
  57. ),
  58. isort( Prefs, Prefs1 ).
  59.  
  60. pair_prefs( [] ).
  61.  
  62. %
  63. person_things( Persons, Pref_List, Person, Things ) :-
  64. member( Person, Persons ),
  65. member( Things, Pref_List ),
  66. likes_things( Person, Things ).
  67.  
  68. % Все персоны, представленные в likes/2
  69. persons( Persons ) :-
  70. setof( Person, Person^Thing^likes( Person, Thing ), Persons ).
  71.  
  72. % Все предпочтения, представленнын в likes/2
  73. % и структурированные в соответствии c likes_things/2
  74. things( Persons, PThings_List ) :-
  75. bagof( PThings,
  76. PThings^Person^(
  77. member(Person, Persons ),
  78. likes_things( Person, PThings )
  79. ),
  80. PThings_List
  81. ).
  82.  
  83. % То же, что и likes/2, за исключением того, что указан список предпочтений
  84. likes_things( Person, Things ) :-
  85. setof( Thing, Thing^Person^likes( Person, Thing ), Things ).
  86.  
  87. % Пара персон применима если они не одна и та же персона
  88. is_valid_pair( Person1, Person2 ) :-
  89. dif( Person1, Person2 ),
  90. + is_seen( Person1, Person2 ).
  91.  
  92. % Запись факта истории поиска: пара P1 и P2 проверены
  93. record_seen( P1, P2 ) :- assertz( seen( P1, P2 ) ).
  94.  
  95. % Проверка факта истории поиска: проверены ли пара P1 и P2
  96. % при любом порядке переменных
  97. is_seen( P1, P2 ) :- seen( P1, P2 ); seen( P2, P1 ).
  98.  
  99. %
  100. isort([], []).
  101. isort([H|T], R):- isort(T, W), insert(H, W, R).
  102.  
  103.  
  104. %
  105. insert(X, [], [X]).
  106. insert(X, [H|T], [X|L]):- X @> H, insert(H, T, L).
  107. insert(X, [H|T], [H|L]):- X @=< H, insert(X, T, L).
  108.  
  109. :- initialization( goal ).
  110.  
  111. %
  112. goal :-
  113. most_resembling( Person1, Person2 ),
  114. abolish_seen(),
  115. writef( 'nPersons: %q, %qn', [ Person1, Person2 ] ).
  116.  
  117. % Результат работы pair_prefs/1
  118. % [
  119. % '$pair_prefs'([apple,cat,flower],ann,bob),
  120. % '$pair_prefs'([apple,cat],bob,pem),
  121. % '$pair_prefs'([apple,cat],ann,pem),
  122. % '$pair_prefs'([],pem,tom),
  123. % '$pair_prefs'([],pam,tom),
  124. % '$pair_prefs'([],pam,pem),
  125. % '$pair_prefs'([],bob,tom),
  126. % '$pair_prefs'([],bob,pam),
  127. % '$pair_prefs'([],ann,tom),
  128. % '$pair_prefs'([],ann,pam)
  129. % ]
  130. % Persons: ann, bob
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement