mirror of
https://github.com/PDP-10/its.git
synced 2026-01-27 20:47:38 +00:00
145 lines
2.9 KiB
Plaintext
145 lines
2.9 KiB
Plaintext
|
||
|
||
GOBBLE
|
||
THE PURPOSE IN LIFE OF THE SIMPLEST GERMS IS JUST TO EAT.
|
||
WE SHALL CALL THIS SPECIES THE "GOBBLERS" . EACH SQUARE IN GERMLAND
|
||
INITIALLY IS VERDANT WITH FOOD. BUT WHEN A GOBBLER ARRIVES, ALL OF
|
||
THE FOOD ON THE SQUARE IS EATEN. THE RESULT IS A BARREN
|
||
SQUARE AND THE EATER IS FORCED TO MOVE ON. THE GOAL OF PROGRAMS FOR
|
||
GOBBLERS IS TO KEEP THEM MOVING AS LONG AS THERE IS ANY FOOD LEFT IN
|
||
GERMLAND. THE BASIC PROBLEM GOBBLERS FACE IS GETTING TRAPPED IN A
|
||
REGION OF NO FOOD.
|
||
|
||
HERE IS A LISTING OF A SIMPLE GOBBLER PROGRAM:
|
||
|
||
TO GOBBLE
|
||
10 EAT FOOD HERE
|
||
20 IF FOODP NORTH THEN MOVE NORTH STOP
|
||
30 IF FOODP SOUTH THEN MOVE SOUTH STOP
|
||
40 IF FOODP EAST THEN MOVE EAST STOP
|
||
50 IF FOODP WEST THEN MOVE WEST STOP
|
||
END
|
||
|
||
|
||
(DEFUN GOBBLE NIL
|
||
(PROG NIL
|
||
10. (EAT (FOOD (HERE)))
|
||
20. (COND ((FOODP (NORTH)) (MOVE (NORTH)) (STOP)))
|
||
30. (COND ((FOODP (SOUTH)) (MOVE (SOUTH)) (STOP)))
|
||
40. (COND ((FOODP (EAST)) (MOVE (EAST)) (STOP)))
|
||
50. (COND ((FOODP (WEST)) (MOVE (WEST)) (STOP)))
|
||
(END)))
|
||
(PRINC REPEAT-INTRO)
|
||
|
||
(UNITE 'GOBBLE ':CONTENTS)
|
||
|
||
(GRID 5.)
|
||
|
||
(SETQ :HUNGRY T)
|
||
|
||
(GERM 1. '(0. 0.))
|
||
|
||
(FILLFOOD 1.)
|
||
|
||
(READCH)
|
||
|
||
(PRINTGRID)
|
||
(REPEAT (GOBBLE))
|
||
|
||
NIL
|
||
FANCY/ GOBBLER
|
||
HERE IS A SIMILAR, BUT SOMEWHAT FANCIER
|
||
GOBBLER. IT USES THE DIRECTIONAL PRIMITIVES, AND GOES AROUND
|
||
THE GRID, RATHER THAN UP AND DOWN. IT LOOKS LIKE THIS:
|
||
|
||
|
||
TO XGOBBLE
|
||
10 LOCAL 'X
|
||
20 MAKE 'X 0
|
||
25 EAT FOOD HERE
|
||
30 IF FOODP FRONT THEN MOVE FRONT STOP
|
||
40 MAKE 'X :X + 1 IF :X = 4 THEN STOP
|
||
50 RIGHT 90 GO 30
|
||
END
|
||
|
||
|
||
|
||
|
||
|
||
(DEFUN XGOBBLE NIL
|
||
(PROG (:X)
|
||
10. (LOCAL 'X)
|
||
20. (MAKE 'X 0.)
|
||
25. (EAT (FOOD (HERE)))
|
||
30. (COND ((FOODP (FRONT)) (MOVE (FRONT)) (STOP)))
|
||
40. (MAKE 'X (INFIX-PLUS :X 1.))
|
||
(COND ((INFIX-EQUAL :X 4.) (STOP)))
|
||
50. (RIGHT 90.)
|
||
(GO 30.)
|
||
(END)))
|
||
(UNITE 'XGOBBLE ':CONTENTS)
|
||
|
||
(PRINC REPEAT-INTRO)
|
||
(GRID 5.)
|
||
|
||
(SETQ :HUNGRY T)
|
||
|
||
(GERM 1. '(0. 0.))
|
||
|
||
(FILLFOOD 1.)
|
||
|
||
(READCH)
|
||
|
||
(PRINTGRID)
|
||
(REPEAT (XGOBBLE))
|
||
|
||
NIL
|
||
|
||
|
||
GOAROUND
|
||
THE GERMLAND GRID MAY CONTAIN OBSTACLES, WHICH
|
||
PRINT AS X'S. A GERM CANNOT MOVE ONTO A SQUARE
|
||
WHICH IS AN OBSTACLE, BUT IT CAN DETECT WHETHER
|
||
THE SQUARE ON ANY PARTICULAR SIDE OF IT CONTAINS
|
||
AN OBSTACLE. THE FOLLOWING PROGRAM DEMONSTRATES THE
|
||
USE OF OBSTACLES: THIS GERM EXPECTS TO START OUT
|
||
NEXT TO A COLLECTION OF OBSTACLES, WHICH IT PROCEEDS
|
||
TO GOAROUND.
|
||
|
||
TO GOAROUND
|
||
10 TEST TOUCH LEFTSIDE
|
||
20 IFTRUE IF TOUCH FRONT THEN RIGHT 90 GO 20
|
||
30 IFTRUE FORWARD 1 STOP
|
||
40 RIGHT 270 FORWARD 1
|
||
END
|
||
|
||
|
||
(DEFUN GOAROUND NIL
|
||
(PROG NIL
|
||
10. (TEST (TOUCH (LEFTSIDE)))
|
||
20. (IFTRUE (COND ((TOUCH (FRONT)) (RIGHT 90.) (GO 20.))))
|
||
30. (IFTRUE (FORWARD 1.) (STOP))
|
||
40. (RIGHT 270.)
|
||
(FORWARD 1.)
|
||
(END)))
|
||
(UNITE 'GOAROUND ':CONTENTS)
|
||
(PRINC REPEAT-INTRO)
|
||
(GRID 5.)
|
||
|
||
(SETQ :HUNGRY NIL)
|
||
|
||
(GERM 1. '(4. 1.))
|
||
|
||
(MAPC 'OBSTRUCT
|
||
'((1. 1.) (1. 2.) (2. 2.) (2. 3.) (3. 1.) (3. 2.)))
|
||
|
||
(READCH)
|
||
|
||
(PRINTGRID)
|
||
(REPEAT (GOAROUND))
|
||
|
||
NIL
|
||
|
||
NIL
|
||
|
||
|