Я использую Gforth, чтобы попытаться реализовать возведение в степень. Я понимаю, теоретически, как должен работать язык на основе стека. Тем не менее, у меня возникают трудности с моей реализацией его на Gforth.Выполнение возведения в степень Forth
Вот что я прямо сейчас:
: myexp
1 swap ?do rot dup * rot rot loop ;
Однако, когда я запускаю его я вижу стек сгущенного как:
3 2 myexp
:1: Stack underflow
3 2 >>>myexp<<<
Backtrace:
$7F645EFD6EF0 rot
$2
$1
зацикливается структура Gforth манипулирует стек, когда он петлями?
Я в темноте на том, как Forth работает, поскольку большинство примеров циклов, которые я видел в Интернете, скорее связаны и смущают кого-то нового для Forth.
Что не так с моей реализацией?
Спасибо! Не могли бы вы также объяснить, что находится в()? Я знаю текст после комментария \, но я не уверен, что должно произойти в(). – David
'()' также является комментарием, поэтому вы можете разместить там что угодно. Тем не менее, существует соглашение о добавлении комментария стека к определениям. Таким образом, материал до и после '--' - это элементы в стеке до и после определения. Существуют также соглашения о том, как описывать элементы; в этом случае 'u' означает беззнаковые числа. –
См., Например, http://lars.nocrew.org/dpans/dpans2.htm#2.2.2 и http://www.complang.tuwien.ac.at/forth/gforth/Docs-html/Stack_002dEffect-Comments-Tutorial.html# Stack_002dEffect-Комментарии-Tutorial –