diff --git a/src/bh/lib.logo b/src/bh/lib.logo index 8190237c..a91c25fd 100644 --- a/src/bh/lib.logo +++ b/src/bh/lib.logo @@ -3,6 +3,8 @@ ;;; WRITTEN BY BRIAN HARVEY AND ;;; PORTED TO ITS LLOGO BY ALEXEY SLYUSAR +;; version 0.01 + TO ? 10 OP :TEMPLATE.VAR END @@ -73,3 +75,45 @@ TO FOREACH1 :TEMPLATE.VAR 10 RUN :FOREACH.TEMPLATE 20 FOREACH BF :TEMPLATE.LIST :FOREACH.TEMPLATE END + +ERASE PRIMITIVE MAP +; MAP ERASED +TO MAP :MAP.TEMPLATE :TEMPLATE.LIST +10 OP MAP1 PREPARE.TEMPLATE :MAP.TEMPLATE :TEMPLATE.LIST 1 +END +;MAP DEFINED + +TO MAP1 :MAP.TEMPLATE :TEMPLATE.LIST :TEMPLATE.NUMBER +10 IF EMPTYP :TEMPLATE.LIST OP [] +20 LOCAL 'TEMPLATE.VAR +30 MAKE 'TEMPLATE.VAR FIRST :TEMPLATE.LIST +40 OP FPUT (RUN :MAP.TEMPLATE) (MAP1 :MAP.TEMPLATE (BF :TEMPLATE.LIST) 1+:TEMPL! +ATE.NUMBER) +END +;MAP1 DEFINED + +TO MAP.SE :MAP.SE.TEMPLATE :MAP.SE.LIST +10 IF EMPTYP :MAP.SE.LIST OP [] +20 OP MAP.SE1 FIRST :MAP.SE.LIST +END +;MAP.SE DEFINED + +TO MAP.SE1 :TEMPLATE.VAR +10 OP SE (RUN :MAP.SE.TEMPLATE)(MAP.SE :MAP.SE.TEMPLATE BF :MAP.SE.LIST) +END +;MAP.SE1 DEFINED + +TO ITEM :ELEMENT :LIST +10 IF :ELEMENT = 1 OP FIRST :LIST +20 OP ITEM (:ELEMENT - 1) BF :LIST +END +;ITEM DEFINED + +ERASE PRIMITIVE MEMBER +; MEMBER ERASED +TO MEMBERP :WORD :LIST +10 IF EMPTYP :LIST OP 'NIL +20 IF EQUAL :WORD (FIRST :LIST) OP 'T +30 OP MEMBERP :WORD (BF :LIST) +END +;MEMBER DEFINED