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

Материал из ПМК вики
Перейти к навигации Перейти к поиску
 
(не показано 36 промежуточных версий этого же участника)
Строка 4: Строка 4:
== Константы ==
== Константы ==
  2 Constant cell
  2 Constant cell
  0 Constant false
  8 Constant 8
  -1 Constant true
  10 Constant 10
16 Constant 16
  '"' Constant quote
  '"' Constant quote


== Определяющие слова ==
== Массивы ==
: Vector  ( #cells -- ) <Builds 2× allot
Одномерные и двумерные массивы [[Десятичное число|десятичных чисел]], без проверки границ индекса. Нумерация элементов начинается с нуля. При инициализации передаётся количество элементов (количество строк и столбцов, в случае двумерного массива).
    DOES> ( i -- ’cell)  ↔ 2× + ;
 
  : CVector ( #cells -- )  <Builds allot
Например, {{Текст на индикаторе|3 Vector V}} создаёт одномерный массив V из трёх элементов: {{Текст на индикаторе|0 V}} {{Текст на индикаторе|1 V}} и {{Текст на индикаторе|2 V}}:
     DOES> ( i -- ’cell)  + ;
  : Vector  ( #cells -- )  <Builds Дhere , Дallot
  : CMatrix ( i' j' --    )  <Builds over , × allot
     DOES> ( i -- ’cell)  @ + ;
     DOES> ( i j -- 'cell)  ↔ over @ × + + 2+ ;
  : Matrix ( i' j' --    )  <Builds over , Дhere ,  × Дallot
     DOES> ( i j -- 'cell)  @ rot × rot + ↔ 2+ + ;


== Манипуляции со стеком ==
== Манипуляции со стеком ==
Строка 20: Строка 22:
  : tuck  ( a b -- b a b )    ↔ over ;
  : tuck  ( a b -- b a b )    ↔ over ;
  : nip  ( a b -- b )        ↔ drop ;
  : nip  ( a b -- b )        ↔ drop ;


== Арифметика ==
== Арифметика ==
: 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= ;
  : 0≠  ( a -- a ≠ 0 )    0=  0= ;
: not  ( a -- b )  inverse ;
  : 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 -- ? )
Строка 33: Строка 34:


== Работа с памятью ==
== Работа с памятью ==
: 0!  ( a -- )    0 ↔ ! ;
  : 1+! ( a -- )    1 ↔ +! ;
  : 1+! ( a -- )    1 ↔ +! ;
  : 1-! ( a -- )  -1 ↔ +! ;
  : 1-! ( a -- )  -1 ↔ +! ;
Строка 40: Строка 40:
  : compile, ( a --) , ;
  : 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  ( CFA -- LFA )  body> ;        \ 2-
  : link>  ( LFA -- CFA )  2+ ;
  : link>  ( LFA -- CFA )  2+ ;
  : b>link ( PFA -- LFA )  body> body> ;  \ 4-
  : b>link ( PFA -- LFA )  body> body> ;  \ 4-
  : l>body ( LFA -- PFA )  2+  2+ ;      \ 4+
  : l>body ( LFA -- PFA )  2+  2+ ;      \ 4+
== Строки, завершающиеся [[Символ с кодом 0|нулевым символом]] ==
: 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 ;


== Ввод-вывод ==
== Ввод-вывод ==
Вывод строк, завершающихся [[Символ с кодом 0|нулевым символом]]:
: typez  ( a -- )  BEGIN ↑ c@  ↑ WHILE emit 1+ REPEAT  2drop ;
  : home  ( -- )  0 ↑ at-xy ;
  : home  ( -- )  0 ↑ at-xy ;
  : wait  ( -- )  key drop ;
  : wait  ( -- )  ekey drop ;


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


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


== Остальное ==
== Остальное ==
  : binary    2 base ! ;
  : binary    2 base ! ;
  : octal    8 base ! ;
  : octal    8 base ! ;
  : recurse  latest name> , ; immediate
: grads    2 9045 рег! ;
: cells    2× ;
: cell+    2+ ;
  : recurse  ?comp  last name> , ; immediate
: defer! ( xt2 xt1 -- )  >body ! ;
: defer@ ( xt1 -- xt2 )  >body @ ;




{{нет иллюстраций}}
{{заготовка}}
[[Категория:Каллисто]]
[[Категория:Каллисто]]

Текущая версия от 20:13, 10 ноября 2017

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


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

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 @ ;


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


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