/* * Copyright (c) 2012 Benjamin Franzke * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ pay(c,d,1). pay(d,d,2). pay(c,c,3). pay(d,c,4). step(A, B, PAY_A, PAY_B) :- pay(A, B, PAY_A), pay(B, A, PAY_B). % Use opponents last decision tit4tat_select(H,[H|_]). % Fallback to coorporate at beginning tit4tat_select(c,[]). tit4tat(A, Hist, PayA, PayB) :- tit4tat_select(Old, Hist), step(A, Old, PayA, PayB). sum([], 0). sum([H|T], S):-sum(T, TMP), S is TMP + H. loop(end, _). loop(End, Hist, PayedA, PayedB):- End\=end, write('Type c,d or e to end: '), read(Choice), tit4tat(Choice, Hist, PAY_A, PAY_B), write('A Pay: '),write(PAY_A),write('\t'), write('B Pay: '),write(PAY_B),write('\t'), write('A: '), sum([PAY_A|PayedA], SumA), write(SumA), write('\t'), write('B: '), sum([PAY_B|PayedB], SumB), write(SumB), nl, loop(Choice, [Choice|Hist], [PAY_A|PayedA], [PAY_B|PayedB]). start:-loop(noend, [], [], []).