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) непревычно превыкнуть к стековой системе, но зато очень интересно разобратся в этом удивительном конструкторе |
Автор: | 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/ |