:-טען(list).
% *
% ** פרוייקט בפרולוג **
% *
% סוגי עובדות
%**
% שחקן(שם(_שם,_שם_משפחה,_גיל),_מספר_נצחונות,_מספר_הפסדים,_רווחים,_סוג_משחק).
% משחק(_סוג_משחק).
% עובדות
%*
משחק(בלאק_גאק).
משחק(פוקר).
משחק(רולטה).
משחק(רמי).
משחק(מכונת_מזלות).
משחק(סוליטר).
משחק(קוביות).
משחק(בקרה).
משחק(ברידג).
שחקן(שם(שגיא,הללי,1000,5,23,(24,פוקר).
שחקן(שם(איתי,זכריה,898,10,22,(22,פוקר).
שחקן(שם(משה,בן_ציון,609,15,21,(33,פוקר).
שחקן(שם(תומר,כחלון,599,3,18,(24,רולטה).
שחקן(שם(רוני,פטרייקוב,450,4,17,(70,קוביות).
שחקן(שם(רן,ברדה,400,13,16,(22,רמי).
שחקן(שם(שגיא,הללי,350,5,14,(24,מכונת_מזלות).
שחקן(שם(מייקל,אמנאלו,250,13,19,(26,רולטה).
שחקן(שם(אלון,כהן,90,10,12,(24,בלאק_גאק).
שחקן(שם(יניב,סטולרו,50,10,11,(22,בלאק_גאק).
שחקן(שם(ניצן,וייסר,35,12,13,(44,בלאק_גאק).
שחקן(שם(רועי,גרינברג,10,1,3,(18,רולטה).
שחקן(שם(יוסי,מזרחי,5,1,2,(21,מכונת_מזלות).
% חוקים
%**
% 1)
שחקן_חוקי(_שם,_שם_משפחה):-
שחקן(שם(_שם,_שם_משפחה,_גיל),_,_,_,_),
_גיל >= 21.
% מטרת החוק שלמעלה היא לענות על השאלה האם שחקן מסוים הינו שחקן חוקי
% או לא חוקי. שחקן חוקי מוגדר כחוקי אם גילו מעל 18 או שגילו הוא 18.
% 2)
הרוויח_הכי_הרבה(_שם,_שם_משפחה):-
שחקן(שם(_שם,_שם_משפחה,_),_,_,_רווחים,_),
לא (שחקן(שם(_שם2,_שם_משפחה2,_),_,_,_רווחים2,_),
_רווחים < _רווחים2).
% מטרת החוק שלמעלה היא להציג את השחקן שהרוויח הכי הרבה.
% 3)
הרוויח_הכי_מעט(_שם,_שם_משפחה):-
שחקן(שם(_שם,_שם_משפחה,_),_,_,_רווחים,_),
לא (שחקן(שם(_שם2,_שם_משפחה2,_),_,_,_רווחים2,_),
_רווחים > _רווחים2).
% מטרת החוק שלמעלה היא להציג את השחקן שהרוויח הכי מעט כסף.
% 4)
ניצח_הכי_הרבה(_שחקן):-
שחקן(_שחקן,_נצחונות,_,_,_),
לא (שחקן(_שחקן2,_נצחונות2,_,_,_),
_נצחונות < _נצחונות2).
% מטרת החוק שלמעלה היא להציג את השחקן שניצח הכי הרבה פעמים.
% 5)
הפסיד_הכי_הרבה(_שחקן):-
שחקן(_שחקן,_,_הפסדים,_,_),
לא (שחקן(_שחקן2,_,_הפסדים2,_,_),
_הפסדים < _הפסדים2).
% מטרת החוק שלמעלה היא להציג את השחקן שהפסיד הכי הרבה פעמים.
% 6)
מהמר_כפייתי(_שם,_שם_משפחה,_מספר_משחקים):-
שחקן(שם(_שם,_שם_משפחה,_),_נצחונות,_הפסדים,_,_),
_נצחונות _הפסדים > 30,
_מספר_משחקים הוא _נצחונות _הפסדים.
% מטרת החוק שלמעלה היא להציג את שמו הפרטי, את שם המשפחה ואת מספר המשחקים של
% השחקן שהוא מהמר כפייתי. מהמר כפייתי הוא אדם ששיחק יותר מ-30 משחקים.
% 7)
מהמר_מתחיל(_שם,_שם_משפחה,_מספר_משחקים):-
שחקן(שם(_שם,_שם_משפחה,_),_נצחונות,_הפסדים,_,_),
_נצחונות _הפסדים < 6,
_מספר_משחקים הוא _נצחונות _הפסדים.
% מטרת החוק שלמעלה היא להציג את שמו הפרטי, את שם המשפחה ואת מספר המשחקים של
% השחקן שהוא מהמר מתחיל. מהמר מתחיל הוא אדם ששיחק פחות מ-6 משחקים.
% 8)
משחק_שניצחו_בו_הכי_הרבה(_סוג_משחק,_מספר_נצחונות):-
ניצח_הכי_הרבה(_שם,_שם_משפחה),
שחקן(שם(_שם,_שם_משפחה,_),_מספר_נצחונות,_,_,_סוג_משחק).
% מטרת החוק שלמעלה היא להציג את סוג המשחק שבו ניצחו הכי הרבה פעמים.
% 9)
משחק_שהפסידו_בו_הכי_הרבה(_סוג_משחק,_מספר_הפסדים):-
הפסיד_הכי_הרבה(_שם,_שם_משפחה),
שחקן(שם(_שם,_שם_משפחה,_),_,_מספר_הפסדים,_,_סוג_משחק).
% מטרת החוק שלמעלה היא להציג את סוג המשחק שבו הפסידו הכי הרבה.
% 10)
משחק_רווחי(_סוג_משחק):-
שחקן(_שם,_,_,_רווחים,_סוג_משחק),
לא (שחקן(_שם2,_,_,_רווחים2,_),
_רווחים < _רווחים2).
% מטרת החוק שלמעלה היא להציג את סוג המשחק שבו הרוויחו הכי הרבה.
% 11)
משחק_לא_רווחי(_סוג_משחק):-
הרוויח_הכי_מעט(_שם,_שם_משפחה),
שחקן(שם(_שם,_שם_משפחה,_),_,_,_,_סוג_משחק).
% מטרת החוק שלמעלה היא להציג את סוג המשחק שבו הרוויחו הכי מעט.
% 12)
שיחק_הכי_הרבה(_שם,_שם_משפחה,_מספר_פעמים):-
שחקן(שם(_שם,_שם_משפחה,_),_נצחונות,_הפסדים,_,_),
לא (שחקן(שם(_שם2,_שם_משפחה2,_),_נצחונות2,_הפסדים2,_,_),
_נצחונות _הפסדים < _נצחונות2 _הפסדים2),
_מספר_פעמים הוא _נצחונות _הפסדים.
% מטרת החוק שלמעלה היא להציג את שמו הפרטי ואת שם המשפחה של השחקן ששיחק
% הכי הרבה פעמים.
% 13)
שיחק_הכי_מעט(_שם,_שם_משפחה,_מספר_פעמים):-
שחקן(שם(_שם,_שם_משפחה,_),_נצחונות,_הפסדים,_,_),
לא (שחקן(שם(_שם2,_שם_משפחה2,_),_נצחונות2,_הפסדים2,_,_),
_נצחונות _הפסדים > _נצחונות2 _הפסדים2),
_מספר_פעמים הוא _נצחונות _הפסדים.
% מטרת החוק שלמעלה היא להציג את שמו הפרטי ואת שם המשפחה של השחקן ששיחק
% הכי מעט פעמים.
% 14)
הרוויח(_שם,_שם_משפחה,_רווח):-
שחקן(שם(_שם,_שם_משפחה,_),_,_,_רווח,_).
% מטרת החוק שלמעלה היא להציג את הרווח של כל שחקן.
% 15)
שיחק_שחקן_משחק(_שם,_שם_משפחה,_סוג_משחק):-
שחקן(שם(_שם,_שם_משפחה,_),_,_,_,_סוג_משחק).
% מטרת החוק שלמעלה היא להציג את שמו הפרטי, את שם המשפחה ואת סוג המשחק ששיחק
% שחקן מסוים.
% 16)
הרוויח_יותר_מ(_שם,_שם_משפחה,_רווח):-
שחקן(שם(_שם,_שם_משפחה,_),_,_,_כמות_רווחים,_),
_כמות_רווחים >= _רווח.
% מטרת החוק שלמעלה היא להציג את שמו הפרטי ואת שם המשפחה של השחקן אשר הרוויח
% יותר מהרווח שאותו המשתמש יכניס.
% 17)
הרוויח_פחות_מ(_שם,_שם_משפחה,_רווח):-
שחקן(שם(_שם,_שם_משפחה,_),_,_,_כמות_רווחים,_),
_כמות_רווחים =< _רווח.
% מטרת החוק שלמעלה היא להציג את שמו הפרטי ואת שם המשפחה של השחקן אשר הרוויח
% פחות מהרווח שאותו המשתמש יכניס.
% 18)
שחקן_הכי_מבוגר(_שם,_שם_משפחה,_גיל):-
שחקן(שם(_שם,_שם_משפחה,_גיל),_,_,_,_),
לא (שחקן(שם(_שם2,_שם_משפחה2,_גיל2),_,_,_,_),
_גיל < _גיל2).
% מטרת החוק שלמעלה היא להציג את שמו הפרטי ושם משפחתו של השחקן הכי מבוגר.
% 19)
שחקן_הכי_צעיר(_שם,_שם_משפחה,_גיל):-
שחקן(שם(_שם,_שם_משפחה,_גיל),_,_,_,_),
לא (שחקן(שם(_שם2,_שם_משפחה2,_גיל2),_,_,_,_),
_גיל > _גיל2).
% מטרת החוק שלמעלה היא להציג את שמו הפרטי ושם משפחתו של השחקן הכי צעיר.
% 20)
רשימת_שחקנים(_רשימה):-
מצא_כל(_שם,שחקן(שם(_שם,_,_),_,_,_,_),_רשימה).
% מטרת החוק שלמעלה היא להציג את כל שמותם הפרטיים של השחקנים (בתוך רשימה).
% 21)
ממוצע_רווחים_כללי(_ממוצע):-
מצא_כל(_רווח,שחקן(_,_,_,_רווח,_),_רשימה),
מספר_איברים(_מספר,_רשימה),
סכום_רשימה(_סכום,_רשימה),
_ממוצע הוא _מספר/_סכום.
% מטרת החוק שלמעלה היא להציג את ממוצע הרווחים הכללי מבין כל הרווחים שהורווחו.
% 22)
שחקנים_עוקבים(_שחקן,_שחקן2):-
שחקן(_שחקן,_נצחונות,_,_,_),
שחקן(_שחקן2,_נצחונות2,_,_,_),
_נצחונות > _נצחונות2,
לא (שחקן(_שחקן3,_נצחונות3,_,_,_),
_נצחונות3 < _נצחונות,
_נצחונות2 < _נצחונות3).
% מטרת החוק שלמעלה היא להציג שני שחקנים עוקבים (מבחינת נצחונות) כלומר להציג
% את השחקנים שמספר הנצחונות שלהם הקרוב ביותר אחד לשני.
% 23)
דירוג_שחקן(_שחקן,1):-
ניצח_הכי_הרבה(_שחקן).
דירוג_שחקן(_שחקן,_דירוג):-
שחקנים_עוקבים(_שחקן_אחר,_שחקן),
דירוג_שחקן(_שחקן_אחר,N),
_דירוג הוא 1 N.
% מטרת החוק שלמעלה היא לדרג את השחקנים לפי זכיותיהם.
% 24)
אחוזי_זכייה_למשחק(_אחוזי_זכייה,_משחק):-
משחק(_משחק),
מצא_כל(_ניצחונות,שחקן(_,_ניצחונות,_,_,_משחק),_רשימת_ניצחונות),
מצא_כל(_הפסדים,שחקן(_,_,_הפסדים,_,_משחק),_רשימת_הפסדים),
סכום_רשימה(_סכום_ניצחונות,_רשימת_ניצחונות),
סכום_רשימה(_סכום_הפסדים,_רשימת_הפסדים),
_כמות_משחקים הוא _סכום_ניצחונות _סכום_הפסדים,
_אחוזי_זכייה הוא (_כמות_משחקים / _סכום_ניצחונות) * 100.
% מטרת החוק שלמעלה היא להציג את אחוזי הזכייה לכל משחק.
% 25)
אחוזי_זכייה_לשחקן(_אחוזי_זכייה,_שחקן):-
שחקן(_שחקן,_,_,_,_),
מצא_כל(_ניצחונות,שחקן(_שחקן,_ניצחונות,_,_,_),_רשימת_ניצחונות),
מצא_כל(_הפסדים,שחקן(_שחקן,_,_הפסדים,_,_),_רשימת_הפסדים),
סכום_רשימה(_סכום_ניצחונות,_רשימת_ניצחונות),
סכום_רשימה(_סכום_הפסדים,_רשימת_הפסדים),
_כמות_משחקים הוא _סכום_ניצחונות _סכום_הפסדים,
_אחוזי_זכייה הוא (_כמות_משחקים / _סכום_ניצחונות) * 100.
% מטרת החוק שלמעלה היא להציג את אחוזי הזכייה לכל שחקן.
שחקן_עם_יותר_ממשחק_אחד(_שחקן):-
שחקן(_שחקן,_,_,_,_משחק),
שחקן(_שחקן,_,_,_,_משחק2),
_משחק \= _משחק2.
מעל_ממוצע(_רשימה):-
ממוצע_רווחים_כללי(_ממוצע),
מצא_כל(_שם,(שחקן(שם(_שם,_,_),_,_,_רווח,_),_רווח>_ממוצע),_רשימה).
רווח_ממוצע_למשחק(_משחק,_ממוצע):-
משחק(_משחק),
מצא_כל(_רווחים,שחקן(_,_,_,_רווחים,_משחק),_רשימה),
מספר_איברים_ברשימה(_מספר,_רשימה),
סכום_רשימה(_סכום,_רשימה),
_ממוצע הוא _מספר/_סכום.
משחק_הכי_רווחי(_סוג_משחק):-
משחק(_סוג_משחק),
מצא_כל(_רווחים,שחקן(_,_,_,_רווחים,_סוג_משחק),_רשימה),
סכום_רשימה(_רווח,_רשימה),
לא (משחק(_סוג_משחק2),
מצא_כל(_רווחים2,שחקן(_,_,_,_רווחים2,_סוג_משחק2),_רשימה2),
סכום_רשימה(_רווח2,_רשימה2),
_רווח < _רווח2).