mirror of
https://github.com/PDP-10/its.git
synced 2026-01-31 22:12:14 +00:00
Add choices program and routines library for LLOGO.
This commit is contained in:
committed by
Alexey-Slyusar
parent
43693e1286
commit
fbce47379d
27
src/bh/choices.logo
Normal file
27
src/bh/choices.logo
Normal file
@@ -0,0 +1,27 @@
|
||||
;;; CHOICES WRITTEN BY BRIAN HARVEY,
|
||||
;;; ADAPTED FOR PDP-10 ITS LLOGO BY ALEXEY SLYUSAR.
|
||||
;;; TO RUN, TYPE FROM LLOGO PROMPT:
|
||||
;;; ?RF CHOICES LOGO DSK BH
|
||||
;;; ?CHOICES [[SMALL MEDIUM LARGE][VANILLA [ULTRA CHOCOLATE] LYCHEE
|
||||
;;; [RUM RAISIN] GINGER][CONE CUP]] []
|
||||
;;; THIS IS SHORT BUT COMPLETE PROGRAM.
|
||||
;;; TO QUOTE THE AUTHOR:
|
||||
;;; "THE PROGRAM DOESN’T HAVE ANYTHING ABOUT THE SIZE OF THE MENU BUILT IN.
|
||||
;;; YOU CAN USE ANY NUMBER OF CATEGORIES, AND ANY NUMBER OF POSSIBILITIES
|
||||
;;; IN EACH CATEGORY.”
|
||||
;;; ORIGINAL CODE MAY BE REACHED AT:
|
||||
;;; https://people.eecs.berkeley.edu/~bh/logo-sample.html
|
||||
|
||||
;; CHOICES PROGRAM
|
||||
|
||||
TO CHOICES :MENU :SOFAR
|
||||
10 IF EMPTYP :MENU PRINT :SOFAR STOP
|
||||
20 FOREACH FIRST :MENU [(CHOICES BF :MENU SE :SOFAR ?)]
|
||||
END
|
||||
|
||||
;; DEPENDENCIES
|
||||
;; IN FACT, ONLY FOREACH ROUTINE IS NEEDED.
|
||||
;; SO IT IS NOT NECESSARY TO LOAD ALL LIB
|
||||
;; DEFINITIONS.
|
||||
|
||||
RF LIB LOGO DSK BH
|
||||
75
src/bh/lib.logo
Normal file
75
src/bh/lib.logo
Normal file
@@ -0,0 +1,75 @@
|
||||
;;; LIBRARY OF LOGO FUNCTIONS FOR LLOGO.
|
||||
;;; IT IS MOSTLY HIGHER ORDER FUNCTION DEFINITIONS,
|
||||
;;; WRITTEN BY BRIAN HARVEY AND
|
||||
;;; PORTED TO ITS LLOGO BY ALEXEY SLYUSAR
|
||||
|
||||
TO ?
|
||||
10 OP :TEMPLATE.VAR
|
||||
END
|
||||
|
||||
TO ?REST
|
||||
10 OP BF :TEMPLATE.LIST
|
||||
END
|
||||
|
||||
TO PREPARE.TEMPLATE :TEMPLATE
|
||||
10 IF LISTP :TEMPLATE OP :TEMPLATE
|
||||
20 OP SE :TEMPLATE '?
|
||||
END
|
||||
|
||||
TO PREPARE.TEMPLATE.2 :TEMPLATE
|
||||
10 IF LISTP :TEMPLATE OP :TEMPLATE
|
||||
20 OP SE :TEMPLATE [?1 ?2]
|
||||
END
|
||||
|
||||
TO ?1
|
||||
10 OP :TEMPLATE.VAR1
|
||||
END
|
||||
|
||||
TO ?2
|
||||
10 OP :TEMPLATE.VAR2
|
||||
END
|
||||
|
||||
TO FILTER :FILTER.TEMPLATE :TEMPLATE.LIST
|
||||
10 OP FILTER1 PREPARE.TEMPLATE :FILTER.TEMPLATE :TEMPLATE.LIST 1
|
||||
END
|
||||
|
||||
TO FILTER1 :FILTER.TEMPLATE :TEMPLATE.LIST :TEMPLATE.NUMBER
|
||||
10 IF EMPTYP :TEMPLATE.LIST OP []
|
||||
20 LOCAL 'TEMPLATE.VAR
|
||||
30 MAKE 'TEMPLATE.VAR FIRST :TEMPLATE.LIST
|
||||
40 IF (RUN :FILTER.TEMPLATE) OP FPUT :TEMPLATE.VAR FILTER1 :FILTER.TEMPLATE BF :TEMPLATE.LIST 1 + :TEMPLATE.NUMBER
|
||||
50 OP FILTER1 :FILTER.TEMPLATE BF :TEMPLATE.LIST 1 + :TEMPLATE.NUMBER
|
||||
END
|
||||
|
||||
TO REDUCE :REDUCE.TEMPLATE :TEMPLATE.LIST
|
||||
10 OP REDUCE1 PREPARE.TEMPLATE.2 :REDUCE.TEMPLATE :TEMPLATE.LIST
|
||||
END
|
||||
|
||||
TO REDUCE1 :REDUCE.TEMPLATE :TEMPLATE.LIST
|
||||
10 IF EMPTYP BUTFIRST :TEMPLATE.LIST OP FIRST :TEMPLATE.LIST
|
||||
20 LOCAL 'TEMPLATE.VAR1
|
||||
30 LOCAL 'TEMPLATE.VAR2
|
||||
40 MAKE 'TEMPLATE.VAR1 FIRST :TEMPLATE.LIST
|
||||
50 MAKE 'TEMPLATE.VAR2 REDUCE1 :REDUCE.TEMPLATE BF :TEMPLATE.LIST
|
||||
60 OP RUN :REDUCE.TEMPLATE
|
||||
END
|
||||
|
||||
TO FIND :FIND.TEMPLATE :TEMPLATE.LIST
|
||||
10 IF EMPTYP :TEMPLATE.LIST OP []
|
||||
20 OP FIND1 FIRST :TEMPLATE.LIST
|
||||
END
|
||||
|
||||
TO FIND1 :TEMPLATE.VAR
|
||||
10 IF RUN :FIND.TEMPLATE OP FIRST :TEMPLATE.LIST
|
||||
20 OP FIND :FIND.TEMPLATE BF :TEMPLATE.LIST
|
||||
END
|
||||
|
||||
TO FOREACH :TEMPLATE.LIST :FOREACH.TEMPLATE
|
||||
10 IF EMPTYP :TEMPLATE.LIST STOP
|
||||
20 FOREACH1 FIRST :TEMPLATE.LIST
|
||||
END
|
||||
|
||||
TO FOREACH1 :TEMPLATE.VAR
|
||||
10 RUN :FOREACH.TEMPLATE
|
||||
20 FOREACH BF :TEMPLATE.LIST :FOREACH.TEMPLATE
|
||||
END
|
||||
Reference in New Issue
Block a user