Как я могу сделать видимым весь стек с плавающей запятой?

Язык программирования Forth использует стек для передачи параметров между функциями. Вместо того, чтобы присваивать подфункции номер в качестве прямой информации, значение сначала помещается в стек данных, а другая функция берет значение из стека.

Особенностью Forth является обработка целочисленных значений и значений с плавающей запятой в разных стеках. Это означает, что невозможно поместить значение с плавающей запятой в стек данных. При написании коротких программ на Форте часто требуется отладка строк кода.

Это возможно с распечаткой содержимого стека. Если разработчик видит, что сейчас находится в стеке, он легко понимает, что не так с кодом. Распечатка содержимого стека важна для отслеживания ошибок.

После помещения двух чисел в обычный стек данных можно показать его содержимое. В примере оба целых числа выводятся после ввода команды «.s». Но если я помещаю два числа с плавающей запятой в выделенный стек с плавающей запятой, отображается только последний элемент. Как я могу сделать видимым весь стек с плавающей запятой?

gforth example.fs
1 2 .s cr        \ <2> 1 2
1.0e 2.0e f. cr  \ 2.
bye

person Manuel Rodriguez    schedule 26.12.2018    source источник
comment
. и f. извлекают верхнее значение из соответствующего стека (целое число, с плавающей запятой). .s и f.s отображают весь соответствующий стек без извлечения значений.   -  person lurker    schedule 26.12.2018


Ответы (2)


У Gforth есть слово f.s, делающее именно то, что вам нужно.

См. раздел "Изучение" документа Gforth. руководство:

person Vlad    schedule 26.12.2018

Одно из возможных портативных решений (Программа Forth-2012)

\ print floating-point stack content
: .f ( F: i*r -- i*r )
  fdepth 0= if exit then
  here df! 1 dfloats allot
  recurse -1 dfloats allot
  here df@ fdup f.
;
person ruvim    schedule 26.12.2018
comment
Это выглядит запутанно, но это портативное решение для случая, когда ваш Форт не имеет эквивалента .S для стека с плавающей запятой. - person Albert van der Horst; 18.07.2021