Палитра Каллисто

Материал из ПМК вики
Перейти к навигации Перейти к поиску

Чтобы предоставить вам больше места для творчества, следующие слова не включены в ядро Каллисто. При необходимости они могут быть скопированы отсюда и добавлены программистом в свой исходный код.


Константы[править]

2 Constant cell
8 Constant 8
10 Constant 10
16 Constant 16
'"' Constant quote

Массивы[править]

Одномерные и двумерные массивы десятичных чисел, без проверки границ индекса. Нумерация элементов начинается с нуля. При инициализации передаётся количество элементов (количество строк и столбцов, в случае двумерного массива).

Например,  3 Vector V  создаёт одномерный массив V из трёх элементов:  0 V   1 V  и  2 V :

: Vector  ( #cells -- )  <Builds Дhere , Дallot
    DOES> ( i -- ’cell)   @ + ;
: Matrix  ( i' j' --    )  <Builds  over ,  Дhere ,  × Дallot
    DOES> ( i j -- 'cell)  ↑ @  rot × rot +  ↔ 2+ @  + ;

Манипуляции со стеком[править]

: -rot  ( a b c -- c a b )   rot rot ;
: tuck  ( a b -- b a b )     ↔ over ;
: nip   ( a b -- b )         ↔ drop ;


Арифметика[править]

: <=   ( a,b -- a <= b )   ↔  <  0= ;
: ≥    ( a,b -- a ≥ b )    ↔  >  0= ;
: ≠    ( a,b -- a ≠ b  )   =  0= ;
: 0≠   ( a -- a ≠ 0 )     0=  0= ;
: under+  ( a b c -- a+c b )   rot  +  ↔ ;
: within  ( n lo hi+1 -- ? )
     >r  1- over <  ↔ r>  < and ;

Работа с памятью[править]

: 1+! ( a -- )    1 ↔ +! ;
: 1-! ( a -- )   -1 ↔ +! ;
: 2@  ( a -- bb )   ↑ 2+ @  ↔ @ ;
: 2!  ( bb a -- )   ↑ >r ! r> 2+ ! ;
: compile, ( a --) , ;

Числа двойной длины[править]

: d>s ( dd -- i ) 65536, × + ;
: d× ( dd1 dd2 — dd3 ) d>s rot rot d>s × s>d ;
: d@ ( a — n ) 2@ d>s ;

Преобразование адресов полей словарной статьи[править]

: >link  ( CFA -- LFA )  body> ;        \ 2-
: link>  ( LFA -- CFA )  2+ ;
: b>link ( PFA -- LFA )  body> body> ;  \ 4-
: l>body ( LFA -- PFA )  2+  2+ ;       \ 4+

Строки, завершающиеся нулевым символом[править]

: zcount  ( a -- a n )       ↑ 0  BEGIN ↔  ↑ c@  WHILE 1+ ↔ 1+ REPEAT  drop ;
: ztype   ( a -- )           BEGIN ↑ c@  ↑ WHILE emit 1+ REPEAT   2drop ;
: z!      ( asrc adst -- )   BEGIN over c@  ↑ >r  over c!  r> WHILE  ↔ 1+ ↔ 1+  REPEAT  2drop ;

Ввод-вывод[править]

: home  ( -- )   0 ↑ at-xy ;
: wait  ( -- )   ekey drop ;

Работа с внешней памятью[править]

: sclr ( n -- )    ." S# " s. ." Clear ? <Y/CR> "
    key 'Y' = IF buffer b/buf blank update flush then ;
: .line   (line) type ;

Отладка[править]

: c?    ( a -- )    c@ . ;
: рег?  ( u -- )    ип . ;
: s.    ( a -- a )  ↑ . ;
: h.    ( a -- a )  base @ hex over i. base ! ;
: b.    ( -- )      base @ ↑  decimal i.  base ! ;
: prs   ( n -- )    depth 1- min for i 1- pick . next ;
: Дfree ( -- n )    sp@ Дhere - ;

Остальное[править]

: binary    2 base ! ;
: octal     8 base ! ;
: grads     2 9045 рег! ;
: cells     2× ;
: cell+     2+ ;
: recurse   ?comp  last name> , ; immediate
: defer! ( xt2 xt1 -- )   >body ! ;
: defer@ ( xt1 -- xt2 )   >body @ ;


  У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их.


  Это заготовка статьи. Вы можете помочь проекту, дополнив её.