Forth http://fforum.winglion.ru/ |
|
Вопрос чайника http://fforum.winglion.ru/viewtopic.php?f=23&t=2747 |
Страница 1 из 2 |
Автор: | KatastrofaS [ Пн авг 08, 2011 00:30 ] |
Заголовок сообщения: | Вопрос чайника |
Вот такая прога выбивает quark.exe в ОС: : C BEGIN ." Приветики..." AGAIN ; C На экране ничего не появляется. Что не так делаю? |
Автор: | Hishnik [ Пн авг 08, 2011 00:35 ] |
Заголовок сообщения: | Re: Вопрос чайника |
Надо внутрь поставить слово "$" (без кавычек). Это "прокачка" цикла сообщений в Windows. Сейчас получается, что на внутренний виртуальный экран выводятся символы, но программа не может отработать сообщение "перерисовка окна". |
Автор: | Hishnik [ Пн авг 08, 2011 00:39 ] |
Заголовок сообщения: | Re: Вопрос чайника |
Описание лежит на http://www.msyst.ru/quark.pdf |
Автор: | KatastrofaS [ Пн авг 08, 2011 01:04 ] |
Заголовок сообщения: | Re: Вопрос чайника |
Спасибо, теперь выводится нормально. Как прервать цикл, оставаясь в консоли? |
Автор: | Hishnik [ Пн авг 08, 2011 01:14 ] |
Заголовок сообщения: | Re: Вопрос чайника |
KatastrofaS писал(а): Как прервать цикл, оставаясь в консоли? Эээ... никак AGAIN не прерывается. Чтобы прервать, надо писать цикл BEGIN UNTIL. Если будет работать прокачка сообщений, то консоль будет функционировать и в процессе выполнения цикла. |
Автор: | KatastrofaS [ Пн авг 08, 2011 01:49 ] |
Заголовок сообщения: | Re: Вопрос чайника |
Что-то нащупал: : MESSA ." Кранты" BYE ; ' MESSA TO K_ESC Теперь бы знать эквивалент слова ABORT из стандарта 83, которое прерывает задачу и инициирует стандартную чистую консоль. Ну и огромное спасибо! Ещё немного - и я погружаюсь в Кварк ) |
Автор: | Hishnik [ Пн авг 08, 2011 02:19 ] |
Заголовок сообщения: | Re: Вопрос чайника |
ABORT есть, но, как выяснилось, не работает, будучи вызванным как слово Форта. Обычная практика - введение переменной USER_BREAK, которая проверяется в UNTIL. А поскольку прокачка сообщений работает не только для отрисовки, можно сделать так Код: VARIABLE USER_BREAK
: BREAK! USER_BREAK ON ; ' BREAK! TO K_ESC : MAIN 0 USER_BREAK ! BEGIN 10 10 GOTOXY 1 . $ USER_BREAK @ UNTIL 10 10 GOTOXY 32 EMIT // убедились, что действительно выходим ; |
Автор: | Гость [ Чт сен 08, 2011 16:22 ] |
Заголовок сообщения: | Re: Вопрос чайника |
Недавно начал изучать Форт, пользую quark, добрался до массивов и наткнулся на непонятную вещь: CREATE XM[] 10 ALLOT 6 0 XM[] + ! 5 1 XM[] + ! 4 2 XM[] + ! 0 XM[] + @ . 1 XM[] + @ . 2 XM[] + @ . Результат: 263430 1029 4 В чем ошибка то ??? Ну и еще вопрос можно ли делать n-мерные массивы (желательно пример) |
Автор: | _Harry [ Чт сен 08, 2011 16:35 ] |
Заголовок сообщения: | Re: Вопрос чайника |
Гость писал(а): В чем ошибка то ??? 6 0 XM[] + ! А вот в чем нужно писать : либо Код: 5 1 CELLS XM[] + ! \ Упаковка в ячейки 32 разряда ......................... 1 CELLS XM[] + @ . \ соответственно достаем из ячейки либо Код: 5 1 XM[] + B! \ Упаковка в байты ......................... 1 XM[] + B@ . P.S. Не уверен есть ли вы кварке В! B@ может что то другое что пишет и читает байты |
Автор: | chess [ Чт сен 08, 2011 16:39 ] |
Заголовок сообщения: | Re: Вопрос чайника |
Гость писал(а): CREATE XM[] 10 ALLOT 6 0 XM[] + ! 5 1 XM[] + ! 4 2 XM[] + ! 0 XM[] + @ . 1 XM[] + @ . 2 XM[] + @ . Результат: 263430 1029 4 В чем ошибка то ??? надо или так 6 0 XM[] + C! 5 1 XM[] + C! 4 2 XM[] + C! 0 XM[] + C@ . 1 XM[] + C@ . 2 XM[] + C@ . или так 6 0 XM[] + ! 5 4 XM[] + ! 4 8 XM[] + ! 0 XM[] + @ . 4 XM[] + @ . 8 XM[] + @ . Операции ! и @ работают с ячейкой, а ячейка это четыре байта |
Автор: | WingLion [ Чт сен 08, 2011 18:21 ] |
Заголовок сообщения: | Re: Вопрос чайника |
A eще имеет смысл сделать: Код: : XM[]! ( data,index --> ) CELLS XM[] + ! ; : XM[]@ ( index --> data ) CELLS XM[] + @ ; И после этого писать: Код: 6 0 XM[]!
5 1 XM[]! 4 2 XM[]! 0 XM[]@ . 1 XM[]@ . 2 XM[]@ . |
Автор: | Hishnik [ Чт сен 08, 2011 18:57 ] |
Заголовок сообщения: | Re: Вопрос чайника |
Еще в кварке есть слово -TH (от 5 -th, т.е. 5 -е). Оно вычисляет адрес ячейки по начальному адресу массива и индексу ячейки. Т.е. для чтения из 3-го элемента XM[] надо написать XM[] 3 -TH @. Для вещественных чисел существует -FTH. Работа с байтами - C@ C! (от CHAR). Многомерный массив отдельно не существует, это несколько маленьких массивов, объединенных в большой одномерный. Если есть его размеры XMAX, YMAX, то индекс вычисляется как Y*XMAX+X. |
Автор: | white_TigR [ Пт сен 09, 2011 08:19 ] |
Заголовок сообщения: | Re: Вопрос чайника |
Гость писал(а): Код: CREATE XM[] 10 ALLOT Создаст массив на 2.5 стандартных integer, т.к. они занимают 4 байта, а выделено всего 10. Лучше Код: CREATE XM[] 3 CELLS ALLOT
|
Автор: | Гость [ Пт сен 09, 2011 12:38 ] |
Заголовок сообщения: | Re: Вопрос чайника |
Всем огромное спасибо!!!! Теперь все работает как надо. WingLion писал(а): A eще имеет смысл сделать: Код: : XM[]! ( data,index --> ) CELLS XM[] + ! ; : XM[]@ ( index --> data ) CELLS XM[] + @ ; Естественно уже сделал без таких вещей никуда! |
Автор: | VoidVolker [ Сб сен 10, 2011 16:09 ] |
Заголовок сообщения: | Re: Вопрос чайника |
Гость, еще стоит покопаться в старых темах этого подраздела в поисках вкусного кода. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |