Палитра Каллисто
Чтобы предоставить вам больше места для творчества, следующие слова не включены в ядро Каллисто. При необходимости они могут быть скопированы отсюда и добавлены программистом в свой исходный код.
Константы
2 Constant cell 0 Constant false -1 Constant true 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 ;
Арифметика
: 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= ; : not ( a -- b ) inverse ; : 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+ ! ; : 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 ;
Работа с внешней памятью
: 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 -- ) @ . ; : 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 ) rp@ pad - ; : Дfree ( -- n ) sp@ Дhere - ;
Остальное
: binary 2 base ! ; : octal 8 base ! ; : grads 2 9045 рег! ; : recurse ?comp last name> , ; immediate
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |