1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-11 23:53:12 +00:00
PDP-10.its/doc/llogo/demos.germ
2018-11-13 09:52:37 +01:00

2.9 KiB
Raw Permalink Blame History

 
 
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