true-grue писал(а):
Вместо этого стоило бы просто попытать силы в примерах выше с использованием локальных переменных.
Да в чем проблема...
Пример от Alex
Код:
CREATE arr 9 , 1 , -1 , -3 , 4 , 0 , 5 , -6 , -7 , 9 ,
: each: ( array) ( 0 arr -- )
R> ( 0 arr xt -- )
SWAP DUP @ >R CELL+ R> ( 0 xt arr+ cnt -- )
0 DO
2DUP 2>R ( 0 xt arr+ R: xt arr+ )
@ SWAP EXECUTE ( 0 n xt -- )
2R> CELL+ ( num xt arr+ -- )
LOOP
2DROP ;
: negatives ( array - count) 0 SWAP each: 0< IF 1+ THEN ;
: zeroes ( array - count) 0 SWAP each: 0= IF 1+ THEN ;
: positives ( array - count) 0 SWAP each: 0 > IF 1+ THEN ;
: main
CR ." Negatives=" arr negatives .
CR ." Zeroes=" arr zeroes .
CR ." Positives=" arr positives . ;
Аналог с локальными переменными:
Код:
CREATE arr 9 , 1 , -1 , -3 , 4 , 0 , 5 , -6 , -7 , 9 ,
: each: R> { array xt -- }
array @ 0
DO
array CELL+ TO array
array @ xt EXECUTE
LOOP
;
: negatives ( array - count) 0 SWAP each: 0< IF 1+ THEN ;
: zeroes ( array - count) 0 SWAP each: 0= IF 1+ THEN ;
: positives ( array - count) 0 SWAP each: 0 > IF 1+ THEN ;
: main
CR ." Negatives=" arr negatives .
CR ." Zeroes=" arr zeroes .
CR ." Positives=" arr positives . ;
Написано для любителей Си