1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-21 18:16:07 +00:00
PDP-10.its/src/bh/lib.logo
2019-03-09 21:56:43 +03:00

76 lines
1.8 KiB
Plaintext

;;; 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