Вы можете использовать accept
, чтобы получить ввод пользователя, а затем s>number?
, чтобы попытаться преобразовать его в число.accept
ожидает адрес памяти и максимальную длину.'s> число? `оставляет двойку и флаг.
Таким образом, вы можете сделать что-то вроде
: fetch-input ( - n f )
pad 40 accept
pad swap s>number?
>r d>s r> ;
Если s>number?
не может преобразовать строку в число, оно оставит0 0
под флагом в стеке.
Таким образом, после s>number?
у вас будет три записи в стеке: две части числа с фиксированной точкой двойной точности и флаг - комментарий стека будетбыть : (- nnf).Но я предполагаю, что вы хотите однозначное число с указанием кода в вашем вопросе.
d>s
возьмет число двойной точности и преобразует его в одинарную точность.Нам нужно убрать флаг с пути, чтобы мы могли добраться до номера.Стандартный прием для временного перемещения чего-либо с пути - это переместить его из стека данных в стек возврата, сделать все, что вам нужно, а затем переместить его обратно.Таким образом, >r
и r>
.