|
Last Update: 7 December 2004
Note: |
which can be combined by sequence, selection (if-then-else), and repetition (while-loop).
There are other ways to characterize TMs. For more information, see:
//Karel as Turing Machine; written by Lopa Mukherjee
beginning-of-program
//------------------------------------------------------------------------------------------------------
// beginning of some generic instruction definitions that help Karel to move around
// in his world
define-new-instruction turnaround as
begin
turnleft;
turnleft;
end;
define-new-instruction face-south as
while not-facing-south do
turnleft;
define-new-instruction face-north as
while not-facing-north do
turnleft;
define-new-instruction face-east as
while not-facing-east do
turnleft;
define-new-instruction face-west as
while not-facing-west do
turnleft;
define-new-instruction pickallbeeper as
while next-to-a-beeper do
pickbeeper;
define-new-instruction move-right-without-putting-beeper as
begin
face-south;
if front-is-clear then
move
else
begin
face-east;
move
end
end;
define-new-instruction move-left-without-putting-beeper as
begin
face-west;
if front-is-clear then
move
else
begin
face-north;
move
end
end;
//---------------------------------------------------------------------------------------------------------------------
// beginning of instruction definitions that help Karel to emulate the
// Turing machine
define-new-instruction move-right as
begin
face-south;
if front-is-clear then
move
else
begin
face-east;
move
end;
if not-next-to-a-beeper then
begin
putbeeper;
putbeeper
end
end;
define-new-instruction move-left as
begin
face-west;
if front-is-clear then
move
else
begin
face-north;
move
end;
if not-next-to-a-beeper then
begin
putbeeper;
putbeeper
end
end;
define-new-instruction erase as
begin
move-left-without-putting-beeper;
if not-next-to-a-beeper then
begin
move-right-without-putting-beeper;
pickallbeeper;
move-right-without-putting-beeper
end
else
begin
move-right-without-putting-beeper;
move-right-without-putting-beeper;
if not-next-to-a-beeper then
begin
move-left-without-putting-beeper;
pickallbeeper;
move-left-without-putting-beeper
end
else
move-left-without-putting-beeper
end
end;
define-new-instruction print-1 as
begin
pickallbeeper;
putbeeper;
end;
define-new-instruction print-0 as
begin
pickallbeeper;
putbeeper;
putbeeper
end;
//---------------------------------------------------------------------------------------------------------------
// program to emulate the flow chart for negation
//i/p : 1 square
//o/p : 2 square
beginning-of-execution
if next-to-a-beeper then
begin
pickbeeper;
if next-to-a-beeper then
begin
putbeeper;
move-right;
print-1
end
else
begin
putbeeper;
move-right
end
end;
turnoff;
end-of-execution
end-of-program