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