Forth
http://fforum.winglion.ru/

вопросы чайника, заход №2
http://fforum.winglion.ru/viewtopic.php?f=24&t=1444
Страница 3 из 3

Автор:  Lacoste [ Вт май 04, 2010 17:02 ]
Заголовок сообщения:  Re: вопросы чайника, заход №2

Подскажите пожалуста а за что отвечает слова EKEY, NUMBER?, >NUMBER ?
С уважением ко Всем, Lacoste

Автор:  Alexander [ Вт май 04, 2010 17:17 ]
Заголовок сообщения:  Re: вопросы чайника, заход №2

Lacoste писал(а):
Подскажите пожалуста а за что отвечает слова EKEY, NUMBER?, >NUMBER ?
С уважением ко Всем, Lacoste

EKEY - ввод с клавиатуры символа, возращает некий код содержащий в себе признаки нажатия клавиш Ctrl, Alt, Shift и еще признак так называемоего скан-кода клавиши
NUMBER? - преобразует строку определенной длины расположеную по некотрому адресу в число на стеке, формируя признак этого числа - двойной оно размерности или одинарной, или вообще нет числа там при вводе (зависит от системы счисления установленной перменной BASE)
>NUMBER - преобразует строку до первого символа отличного от цифры, оставляя на стеке помимо полученного числа, информацию о непреобразованных символах в строке (адрес и длина).

Автор:  Lacoste [ Вт май 04, 2010 17:37 ]
Заголовок сообщения:  Re: вопросы чайника, заход №2

Тоесть мы ввели число и определили его с помощью >NUMBER. Но >NUMBER помимо самого числа запоминает адрес и длину. А как отделить само число от адреса и длины?
I am Sorry, за очень глупые вопросы, просто после Basic'а (print, input), и Lua (io.write, io.read) непревычно превыкнуть к стековой системе, но зато очень интересно разобратся в этом удивительном конструкторе :roll:

Автор:  Alexander [ Вт май 04, 2010 17:57 ]
Заголовок сообщения:  Re: вопросы чайника, заход №2

Lacoste писал(а):
. А как отделить само число от адреса и длины?

если длина оставшейся строки станет 0, то надо отбросит и адрес и тогда на вершине наше число.

Автор:  Lacoste [ Вт май 04, 2010 17:59 ]
Заголовок сообщения:  Re: вопросы чайника, заход №2

Спаибо, Alexander, тоесть берем верхнее число из стека :)

Автор:  kzagradskiy [ Вт май 04, 2010 18:10 ]
Заголовок сообщения:  Re: вопросы чайника, заход №2

Alexander писал(а):
Lacoste писал(а):
. А как отделить само число от адреса и длины?

если длина оставшейся строки станет 0, то надо отбросит и адрес и тогда на вершине наше число.

Было бы проще понять о чем речь если бы объяснение сопровождалось стековой нотацией. Насколько я понял из объяснения говорится о следующем.

Нотация >NUMBER:
>NUMBER (" " --> u addr n)
где:
u -- длина необработанной части строки
addr -- адрес необработанной части строки
n -- число, преобразованное из начала строки

Для получения самого числа нужно сделать:
S" 24214bfdbd"
>NUMBER (" " -- u addr n)
DROP (-- addr n)
DROP (-- n)

Я правильно понял?

Автор:  mOleg [ Вт май 04, 2010 18:20 ]
Заголовок сообщения:  Re: вопросы чайника, заход №2

не ленимся и читаем про устройство строк в Форте

Автор:  Alexander [ Вт май 04, 2010 18:22 ]
Заголовок сообщения:  Re: вопросы чайника, заход №2

не ) нам надо u ,

>NUMBER - это вообще самый низкий уровень представления информации
чаще NUMBER используют, но он не говрит какое число получили в 1 ячейку размером или 2

ваще так вот
Код:
0 S>D S" 12345" >NUMBER 2DROP

На вершине число в 2 ячейки, что с ним делать операцию D>S или нет - решать программисту

Автор:  mOleg [ Вт май 04, 2010 18:52 ]
Заголовок сообщения:  Re: вопросы чайника, заход №2

Lacoste писал(а):
Тоесть мы ввели число и определили его с помощью >NUMBER

правильнее сказать распознали. Проблема только в том, что NUMBER возвращает число двойной длины.
число двойной длины - это означает, что на вершины стека лежит два числа, которые образуют одно целое число двойной разрядности.

Lacoste писал(а):
Но >NUMBER помимо самого числа запоминает адрес и длину

нет, >NUMBER на входе получает строку(которая представлена адресом начала и длиной)
и число двойной длины (обычно два нуля), возвращает так же преобразованное число и строку-остаток, длина которой при успешном завершении преобразования равна нулю.

Страница 3 из 3 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/