Skip to content

Instantly share code, notes, and snippets.

@rndmcnlly
Created March 19, 2010 22:31
Show Gist options
  • Save rndmcnlly/338270 to your computer and use it in GitHub Desktop.
Save rndmcnlly/338270 to your computer and use it in GitHub Desktop.
player(x).
player(o).
#domain player(P).
next(x,o).
next(o,x).
first_player(x).
{ happens(mark(P,C),T) } :-
holds_at(turn(P),T),
holds_at(blank(C),T),
not happens(victory(Pp),T),
next(Pp,P).
cell(0;1;2;
3;4;5;
6;7;8).
#domain cell(C).
event(mark(P,C)).
event(victory(P)).
fluent(blank(C)).
fluent(marked(P,C)).
fluent(turn(P)).
holds_at(blank(C),0).
-holds_at(marked(P,C),0).
holds_at(turn(P),0) :- first_player(P).
-holds_at(turn(P),0) :- not holds_at(turn(P),0).
-released_at(F,0).
initiates(mark(P,C),marked(P,C),T).
terminates(mark(P,C),blank(C),T).
initiates(mark(P,C),turn(Pn),T) :- next(P,Pn).
terminates(mark(P,C),turn(P),T).
happens(victory(P),T) :-
holds_at(marked(P,C1),T),
holds_at(marked(P,C2),T),
holds_at(marked(P,C3),T),
cell(C1;C2;C3),
trigger(C1,C2,C3).
trigger(0,1,2). % -
trigger(3,4,5). % -
trigger(6,7,8). % -
trigger(0,3,5). % |
trigger(1,4,7). % |
trigger(2,5,8). % |
trigger(0,4,8). % \
trigger(6,4,5). % /
#const t_max=3.
timepoint(0..t_max).
:- 2 { happens(Ev,T) :event(Ev) }.
:- 0 { happens(Ev,T) :event(Ev) } 0.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment