Палитра Каллисто: различия между версиями

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


== Арифметика ==
== Арифметика ==
  : 2-  ( a -- a-2 )  BODY> ;
  : 2-  ( a -- a-2 )  body> ;
  : <=  ( a,b ---> a <= b )  ↔  <  0= ;
  : <=  ( a,b -- a <= b )  ↔  <  0= ;
  : ≥    ( a,b ---> a ≥ b )    ↔  >  0= ;
  : ≥    ( 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  +  ↔ ;
  : under+  ( a b c -- a+c b )  rot  +  ↔ ;
  : within  ( n lo hi+1 -- ? )
  : within  ( n lo hi+1 -- ? )

Версия от 08:20, 12 сентября 2015

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


Константы

0 Constant false
-1 Constant true
'"' Constant quote

Определяющие слова

: Vector  ( #cells -- )  <Builds 2× allot
    DOES> ( i -- ’cell)   ↔ 2× + ;
: CVector ( #cells -- )  <Builds allot
    DOES> ( i -- ’cell)   + ;
: CMatrix  ( i' j' --    )  <Builds over , × allot
    DOES>  ( i j -- 'cell)  ↔ over @ × + + 2+ ;

Манипуляции со стеком

: -rot  ( a b c -- c a b )   rot rot ;


Арифметика

: 2-   ( a -- a-2 )   body> ;
: <=   ( 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 ;

Работа с памятью

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

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

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

Ввод-вывод

Вывод строк, завершающихся нулевым символом:

: typez   ( a -- )   BEGIN ↑ c@  ↑ WHILE emit 1+ REPEAT   2drop ;
: wait  key drop ;

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

: thru   ( n1,n2 -- Интерпретировать экраны)
         (         от n1 до n2 включительно)
  1+ over - for ↑ load 1+ next drop ;
: sclr ( n -- )    ." S# " s. ." Clear ? <Y/CR> "
    key 'Y' = IF buffer b/buf blank update flush then ;
: .line   (line) type ;


Отладка

: ?    ( a -- )    @ . ;
: s.   ( a -- a )  ↑ . ;
: h.   ( a -- a )  base @ hex over i. base ! ;
: b.   ( -- )      base @ . ;
: prs  ( n -- )    depth 1- min for i 1- pick . next ;
: free ( -- n )    rp@ pad - ;

Остальное

: binary    2 base ! ;
: octal     8 base ! ;
: recurse   latest name> , ; immediate