среда, 20 апреля 2016 г.

#1229. Скрипты. Тесты к функциям для работы с массивами. №2

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' ] .


Комментариев нет:

Отправить комментарий