Stair-climbing puzzle: Difference between revisions
Content added Content deleted
m (minor fix to reporting in Prolog implementation) |
(Fixed Prolog to match requirements) |
||
Line 910: | Line 910: | ||
=={{header|Prolog}}== |
=={{header|Prolog}}== |
||
The robot code is very short |
The robot code is very short |
||
<lang Prolog> |
<lang Prolog>step_up :- \+ step, step_up, step_up.</lang> |
||
The test program uses a global variable to store the current level and then implements the step behaviour which determines and reports the success of the step and updates the level. |
|||
This is capped at 20 steps but removing the last line will enable the program to run forever. |
|||
<lang Prolog>test_step_robot :- |
|||
⚫ | |||
step_robot. |
|||
The test program keeps track of the level in a dynamic predicate. |
|||
<lang Prolog>:- dynamic level/1. |
|||
setup :- |
|||
⚫ | |||
assert(level(1)). |
|||
step :- |
step :- |
||
level(Level), |
|||
random_between(0,3,N), |
random_between(0,3,N), |
||
( |
( |
||
Line 928: | Line 928: | ||
succ(NewLevel, Level), format('Fell down to ~d~n', NewLevel) |
succ(NewLevel, Level), format('Fell down to ~d~n', NewLevel) |
||
), |
), |
||
retractall(level(Level)), |
|||
assert(level(NewLevel)), |
|||
NewLevel >= 20 -> abort.</lang> |
|||
N > 0. % Fail if 0 because that is a non step up.</lang> |
|||
{{out}} |
{{out}} |
||
<pre> |
<pre> |
||
?- setup, between(1,10,_), step_up, fail. |
|||
?- test_step_robot. |
|||
Climbed up to 2 |
Climbed up to 2 |
||
Climbed up to 3 |
Climbed up to 3 |
||
Line 939: | Line 940: | ||
Fell down to 4 |
Fell down to 4 |
||
Climbed up to 5 |
Climbed up to 5 |
||
⚫ | |||
⚫ | |||
Climbed up to 6 |
Climbed up to 6 |
||
Climbed up to 7 |
Climbed up to 7 |
||
Climbed up to 8 |
Climbed up to 8 |
||
Fell down to 7 |
|||
Climbed up to |
Climbed up to 8 |
||
false. |
|||
⚫ | |||
⚫ | |||
Climbed up to 11 |
|||
Climbed up to 12 |
|||
Climbed up to 13 |
|||
Climbed up to 14 |
|||
Climbed up to 15 |
|||
Climbed up to 16 |
|||
Climbed up to 17 |
|||
Climbed up to 18 |
|||
Fell down to 17 |
|||
Climbed up to 18 |
|||
Climbed up to 19 |
|||
Climbed up to 20 |
|||
% Execution Aborted |
|||
?- |
?- |
||
</pre> |
</pre> |