OSDN Git Service

Build a list of the moves taken.
authorSimon Forman <sforman@hushmail.com>
Mon, 22 Jul 2019 00:55:19 +0000 (17:55 -0700)
committerSimon Forman <sforman@hushmail.com>
Mon, 22 Jul 2019 00:55:19 +0000 (17:55 -0700)
thun/TLA.pl

index a8bd74a..1a841b7 100644 (file)
@@ -39,32 +39,38 @@ next(PC, I) :- PC \= done, relly(PC, I, PCnext, Inext), next(PCnext, Inext).
 \r
 type_ok(Small, Big) :- Small in 0..3, Big in 0..5.\r
 \r
-initi :- die_hard(0, 0, _, _).\r
 \r
-next_dh(Small, Big, S, B) :-\r
-    B #\= 4,\r
-    type_ok(Small, Big),\r
-    die_hard(Small, Big, Si, Bi),\r
-    write(Small), write(" "), write(Big), write(" -> "), write(Si), write(" "), writeln(Bi),\r
-    (Bi = 4 -> true ; next_dh(Si, Bi, S, B)).\r
-next_dh(_, _, _, 4).\r
+next_dh(Small, Big, S, B, Mi, Mo) :-\r
+    B #\= 4, type_ok(Small, Big),\r
+    die_hard(Move, Small, Big, Si, Bi),\r
+    % write_state(Move, Small, Big, Si, Bi),\r
+    State = [Move, Si, Bi],\r
+    (Bi = 4 -> Mo=[State|Mi] ; next_dh(Si, Bi, S, B, [State|Mi], Mo)).\r
+% next_dh(_, _, _, 4, M, M).\r
+\r
+\r
+write_state(Move, Small, Big, Si, Bi) :-\r
+    write(Move), write(": "),\r
+    write(Small), write(" "), write(Big),\r
+    write(" -> "),\r
+    write(Si), write(" "), writeln(Bi).\r
 \r
 \r
 \r
 % die_hard(Small, Big, S, B).\r
-die_hard(Small, Big, 3, Big) :- Small #\= 3, writeln("fill small").  % Fill small.\r
-die_hard(Small, Big, Small, 5) :- Big #\= 5, writeln("fill big").  % Fill big.\r
+die_hard(fill_small, Small, Big, 3, Big) :- Small #\= 3.\r
+die_hard(  fill_big, Small, Big, Small, 5) :- Big #\= 5.\r
 \r
-die_hard(Small, Big, 0, Big) :- Small #> 0, writeln("empty small").  % empty small.\r
-die_hard(Small, Big, Small, 0) :- Big #> 0, writeln("empty big").  % empty big.\r
+die_hard(empty_small, Small, Big, 0, Big) :- Small #> 0.\r
+die_hard(  empty_big, Small, Big, Small, 0) :- Big #> 0.\r
 \r
-die_hard(Small, Big, S, B) :- Big #< 5, Small #> 0,\r
-    small_to_big(Small, Big, S, B),\r
-    writeln("small to big").\r
+die_hard(small_to_big, Small, Big, S, B) :-\r
+    Big #< 5, Small #> 0,\r
+    small_to_big(Small, Big, S, B).\r
 \r
-die_hard(Small, Big, S, B) :- Small #< 3, Big #> 0,\r
-    big_to_small(Small, Big, S, B),\r
-    writeln("big to small").\r
+die_hard(big_to_small, Small, Big, S, B) :-\r
+    Small #< 3, Big #> 0,\r
+    big_to_small(Small, Big, S, B).\r
 \r
 big_to_small(Small, Big, S, 0) :-\r
     Small + Big #=< 3,\r
@@ -84,6 +90,39 @@ small_to_big(Small, Big, S, 5) :-
 \r
 /*\r
 \r
+\r
+call_with_depth_limit(next_dh(0, 0, S, B, Mi, Mo), 12, REsult).\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
 call_with_depth_limit(next_dh(0, 0, S, B), 12, REsult).\r
 \r
 find...\r