mirror of
https://github.com/PDP-10/its.git
synced 2026-01-21 18:16:07 +00:00
76 lines
1.8 KiB
Plaintext
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
|