1
0
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:
Alexey-Slyusar
2019-03-03 20:18:25 +03:00
committed by Alexey-Slyusar
parent 43693e1286
commit fbce47379d
3 changed files with 103 additions and 1 deletions

27
src/bh/choices.logo Normal file
View 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 DOESNT 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
View 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