Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт апр 19, 2024 11:10

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Назначение параметра слова >NUMBER
СообщениеДобавлено: Вс ноя 26, 2006 09:56 
Не в сети

Зарегистрирован: Вс окт 15, 2006 13:05
Сообщения: 149
Откуда: Украина, Киев
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Описание слова (СПФ 4.18):
Код:
: >NUMBER ( ud1 c-addr1 u1 -- ud2 c-addr2 u2 ) \ 94
\ ud2 - результат преобразования символов строки, заданной c-addr1 u1,
\ в цифры, используя число в BASE, и добавлением каждой к ud1 после
\ умножения ud1 на число в BASE. Преобразование продолжается слева
\ направо до первого непреобразуемого символа, включая символы "+" и "-",
\ или до полного преобразования строки.
\ c-addr2 - адрес первого непреобразумого символа или первого символа
\ за концом строки, если строка была полностью преобразована.
\ u2 - число непреобразованных символов в строке.
\ Неоднозначная ситуация возникает, если ud2 переполняется во время
\ преобразования.

не понял, назначение параметра ud1?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 26, 2006 11:43 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
AlexF писал(а):
умножения ud1 на число в BASE


Разбираем строку "23". Сначала определяем цифру 2 и кладем ее на стек, это будет ud1. Есть еще цифра, поэтому умножаем то, что на стеке, на 10 (вообще - на BASE @), и прибавляем новую цифру. То есть 2*10 + 3. Итого, чтобы обработать следующую цифру, нужно умножить уже накопленное значение на BASE @ , а потом уже вносить туда новый разряд. То есть

345:
3 - на стек
Получили 4 - 3*10 + 4 = 34
Получили 5 - 34*10 + 5 = 345


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 26, 2006 12:54 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
ud1 - это старшие разряды результирующего числа.
т.е. если разбирать новое число - то это 0 0
Код:
0 0 S" 32" >NUMBER 2DROP D>S

сравните с
Код:
1 0 S" 32" >NUMBER 2DROP D>S

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн ноя 27, 2006 13:47 
Не в сети

Зарегистрирован: Вс окт 15, 2006 13:05
Сообщения: 149
Откуда: Украина, Киев
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Спасибо за помощь.
Удалось разобраться -- вспомнил, что по нотации ud1 это безнаковое число двойной точности. Поэтому на стеке должно быть два числа. Полученный результат преобразования добавляется к ud1 в младшие разряды. Как понял, это было задумано с тем, чтобы строить нечто конвейеров.

Увы, пользоваться словом, оказалось неудобно:
- не понимает знаки;
- на ведущих пробелах спотыкается :(
- необходимо на стек константы забрасывать...

Поэтому проще оказалось написать новое слово для преобразования.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 29, 2006 23:27 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
AlexF писал(а):
- на ведущих пробелах спотыкается

тут можно поподробнее? откуда им браться?

AlexF писал(а):
необходимо на стек константы забрасывать...

зачем? можно ведь и так: : >numb 0 0 2SWAP >NUMBER ;

AlexF писал(а):
Поэтому проще оказалось написать новое слово для преобразования.

это тоже хороший выход 8)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 30, 2006 16:22 
Не в сети

Зарегистрирован: Вс окт 15, 2006 13:05
Сообщения: 149
Откуда: Украина, Киев
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Цитата:
тут можно поподробнее? откуда им браться?

Все просто -- нужно прочитать CSV файл. По опыту знаю, что пробелы будут и это не самое худшее... :(
Мне показалось, что это слово с претензией на универсальность, но слишком уж капризное...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 30, 2006 17:33 
Цитата:
Поэтому проще оказалось написать новое слово для преобразования.

Хотел тут написать гневную обличительную речь вида: "ах!.. да вы просто не вникаете в глубочайший онтологический смысл этого слова, предопределяющий преисполненный высочайщего эстетизма Forth!".

Но потом посмотрел на ~profit/lib/number.f и ~profit/lib/uni.f, с укоризной на себя поцыкал и одёрнул, не стал.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 01, 2006 11:59 
Не в сети

Зарегистрирован: Вс окт 15, 2006 13:05
Сообщения: 149
Откуда: Украина, Киев
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Код:
Хотел тут написать гневную обличительную речь вида

та, тоже сам мучался долго, не хотелось изобретать велосипед.... Но, думаю в таких случаях лучше давать пример использования. В параллельной ветке про исключения это помогло лучше разобраться со стандартными словами и все оказалось так как и хотелось.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB