/* * 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 . */ %:-initialization(start). pay(c,d,1). pay(d,d,2). pay(c,c,3). pay(d,c,4). pay2(A, B, PayA, PayB) :- pay(A, B, PayA), pay(B, A, PayB). decide(Module, Hist, Decision, State, NewState) :- call(Module, Hist, Decision, State, NewState). sum([], 0). sum([H|T], S) :- sum(T, TMP), S is TMP + H. do(e, _, _, _, _) :- !. do(Choice, Module, ModuleState, Hist, PayedA, PayedB) :- decide(Module, Hist, ModuleDecision, ModuleState, NewModuleState), pay2(Choice, ModuleDecision, PayA, PayB), write('A Pay: '), write(Choice), write(': '), write(PayA), write('\t'), write('B Pay: '), write(ModuleDecision), write(': '), write(PayB), write('\t'), write('A: '), sum([PayA|PayedA], SumA), write(SumA), write('\t'), write('B: '), sum([PayB|PayedB], SumB), write(SumB), nl, loop(Module, NewModuleState, [Choice|Hist], [PayA|PayedA], [PayB|PayedB]). loop(Module, ModuleState, Hist, PayedA, PayedB) :- write('Type c,d or e to end: '), read(Choice), do(Choice, Module, ModuleState, Hist, PayedA, PayedB). start(Module) :- consult(Module), loop(Module, [], [], [], []). start :- start(tit4tat),halt.