UNIT arrays.ms.dict USES to.ms.dict filter.ms.dict map.ms.dict reverted.ms.dict ; EXPORTS * USES macro.ms.dict ; macro IT //ARRAY IN A // - слева должен быть массив ^ IN aWhatToDo %SUMMARY 'Итерирует массив A вызывая лямбду aWhatToDo' ; aWhatToDo CompileRef @ SWAP CompileValue @ ITERATE CompileValue //aWhatToDo A ITERATE ; // IT WordAlias ==> IT macro for ^ IN aList ^ IN aWhatToDo %SUMMARY 'Итерирует массив aList вызывая лямбду aWhatToDo' ; aList CompileRef @ DO CompileValue aWhatToDo CompileRef @ SWAP CompileValue @ ITERATE CompileValue //aList DO ==> ( aWhatToDo DO ) ; // for WordAlias >for> ==> WordAlias .for> ==> WordAlias array:AddTo >>>[] WordAlias .AddToArray: >>>[] PROCEDURE array:?AddTo IN aValue ^ IN anArray ARRAY VAR l_Array anArray DO >>> l_Array aValue l_Array array:Has ! ? ( aValue array:AddTo l_Array ) // aValue l_Array array:Has ! ? ; // array:?AddTo USES axiom_push.ms.dict ; MACRO .InArray: ^ IN anArray anArray CompileValue axiom:PushSymbol array:Has ; // .InArray: MACRO .NotInArray: ^ IN anArray anArray CompileValue axiom:PushSymbol array:Has axiom:PushSymbol ! ; // .NotInArray: MACRO .StringInArray: ^ IN anArray anArray CompileValue axiom:PushSymbol SWAP axiom:PushSymbol array:HasString ; // .StringInArray: MACRO .StringNotInArray: ^ IN anArray anArray CompileValue axiom:PushSymbol SWAP axiom:PushSymbol array:HasString axiom:PushSymbol ! ; // .StringNotInArray: MACRO .TextInArray: ^ IN anArray anArray CompileValue axiom:PushSymbol SWAP axiom:PushSymbol array:HasText ; // .TextInArray: MACRO .TextNotInArray: ^ IN anArray anArray CompileValue axiom:PushSymbol SWAP axiom:PushSymbol array:HasText axiom:PushSymbol ! ; // .TextNotInArray: ... PROGRAM arrayHas.ms.script USES arrays.ms.dict ; 1 [ 1 2 ] array:Has . 3 [ 1 2 ] array:Has . 1 .InArray: [ 1 2 ] . 3 .InArray: [ 1 2 ] . : A1 [ 1 2 ] ; 1 .InArray: A1 . 3 .InArray: A1 . [ 1 2 ] >reverted> . [ 1 2 ] .reverted> . [ 1 2 ] REVERTED . [ 1 2 ] Reverted . [ 1 2 ] reverted . 1 .NotInArray: [ 1 2 ] . 3 .NotInArray: [ 1 2 ] . 1 .NotInArray: A1 . 3 .NotInArray: A1 . [ 'a' 'b' ] 'a' array:HasString . [ 'a' 'b' ] 'c' array:HasString . [ 'a' 'b' ] 'A' array:HasString . [ 'a' 'b' ] 'C' array:HasString . 'a' .StringInArray: [ 'a' 'b' ] . 'c' .StringInArray: [ 'a' 'b' ] . 'A' .StringInArray: [ 'a' 'b' ] . 'C' .StringInArray: [ 'a' 'b' ] . 'a' .StringNotInArray: [ 'a' 'b' ] . 'c' .StringNotInArray: [ 'a' 'b' ] . 'A' .StringNotInArray: [ 'a' 'b' ] . 'C' .StringNotInArray: [ 'a' 'b' ] . [ 'a' 'b' ] 'a' array:HasText . [ 'a' 'b' ] 'c' array:HasText . [ 'a' 'b' ] 'A' array:HasText . [ 'a' 'b' ] 'C' array:HasText . 'a' .TextInArray: [ 'a' 'b' ] . 'c' .TextInArray: [ 'a' 'b' ] . 'A' .TextInArray: [ 'a' 'b' ] . 'C' .TextInArray: [ 'a' 'b' ] . 'a' .TextNotInArray: [ 'a' 'b' ] . 'c' .TextNotInArray: [ 'a' 'b' ] . 'A' .TextNotInArray: [ 'a' 'b' ] . 'C' .TextNotInArray: [ 'a' 'b' ] .
Заметки о тестировании, программировании и прочий "поток сознания", который жалко писать "в стол"
Комментариев нет:
Отправить комментарий