summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Franzke <benjaminfranzke@googlemail.com>2012-11-06 16:11:37 +0100
committerBenjamin Franzke <benjaminfranzke@googlemail.com>2012-11-06 16:12:10 +0100
commita3b6186a07ec266dd1283efd06062d23aede24d4 (patch)
treee13b25c075514b75b992610e6b536d1ea7e2fb4f
parent99d6a28c24f515ef492b50c6eba3af70177b4cbc (diff)
downloadwbs-a3b6186a07ec266dd1283efd06062d23aede24d4.tar.gz
wbs-a3b6186a07ec266dd1283efd06062d23aede24d4.tar.bz2
wbs-a3b6186a07ec266dd1283efd06062d23aede24d4.zip
Begin modularization of prolog prisoners dilemma implementation
-rw-r--r--.gitignore2
-rw-r--r--Makefile6
-rw-r--r--prisoners_dilemma.pl49
-rw-r--r--tit4tat.pl47
4 files changed, 54 insertions, 50 deletions
diff --git a/.gitignore b/.gitignore
index 5470f73..4007296 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,2 @@
tit4tat
-tit4tatpl
+prisoners_dilemma
diff --git a/Makefile b/Makefile
index 7eb74c0..9f8ad86 100644
--- a/Makefile
+++ b/Makefile
@@ -1,10 +1,10 @@
-all: tit4tat tit4tatpl
+all: tit4tat prisoners_dilemma
tit4tat: tit4tat.c
gcc -std=c99 -Wall -o $@ $<
-tit4tatpl: tit4tat.pl
+prisoners_dilemma: prisoners_dilemma.pl
gplc -o $@ $<
clean:
- rm -f tit4tat tit4tatpl
+ rm -f tit4tat prisoners_dilemma
diff --git a/prisoners_dilemma.pl b/prisoners_dilemma.pl
new file mode 100644
index 0000000..66578e8
--- /dev/null
+++ b/prisoners_dilemma.pl
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2012 Benjamin Franzke <benjaminfranzke@googlemail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+:-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, A, Hist, PayA, PayB) :- call(Module, A, Hist, PayA, PayB).
+
+sum([], 0).
+sum([H|T], S) :- sum(T, TMP), S is TMP + H.
+
+do(e, _, _, _, _) :- !.
+do(Choice, Module, Hist, PayedA, PayedB) :-
+ decide(Module, Choice, Hist, PayA, PayB),
+
+ write('A Pay: '), write(PayA), write('\t'),
+ write('B Pay: '), 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, [Choice|Hist], [PayA|PayedA], [PayB|PayedB]).
+
+loop(Module, Hist, PayedA, PayedB) :-
+ write('Type c,d or e to end: '), read(Choice),
+ do(Choice, Module, Hist, PayedA, PayedB).
+
+
+start(Module) :- consult(Module), loop(Module, [], [], []), halt.
+start :- start(tit4tat).
diff --git a/tit4tat.pl b/tit4tat.pl
index a4e7664..e03fd5d 100644
--- a/tit4tat.pl
+++ b/tit4tat.pl
@@ -1,29 +1,4 @@
-/*
- * Copyright (c) 2012 Benjamin Franzke <benjaminfranzke@googlemail.com>
- *
- * 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 <http://www.gnu.org/licenses/>.
- */
-
-:-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).
-
+%
% Use opponents last decision
tit4tat_select(H,[H|_]).
% Fallback to coorporate at beginning
@@ -32,23 +7,3 @@ tit4tat_select(c,[]).
tit4tat(A, Hist, PayA, PayB) :-
tit4tat_select(Old, Hist),
pay2(A, Old, PayA, PayB).
-
-sum([], 0).
-sum([H|T], S) :- sum(T, TMP), S is TMP + H.
-
-do(e, _, _, _) :- !.
-do(Choice, Hist, PayedA, PayedB) :-
- tit4tat(Choice, Hist, PayA, PayB),
-
- write('A Pay: '), write(PayA), write('\t'),
- write('B Pay: '), write(PayB), write('\t'),
- write('A: '), sum([PayA|PayedA], SumA), write(SumA), write('\t'),
- write('B: '), sum([PayB|PayedB], SumB), write(SumB), nl,
-
- loop([Choice|Hist], [PayA|PayedA], [PayB|PayedB]).
-
-loop(Hist, PayedA, PayedB) :-
- write('Type c,d or e to end: '), read(Choice),
- do(Choice, Hist, PayedA, PayedB).
-
-start :- loop([], [], []), halt.