Forth http://fforum.winglion.ru/ |
|
Глюк SPF? http://fforum.winglion.ru/viewtopic.php?f=18&t=1533 |
Страница 1 из 7 |
Автор: | seu [ Ср окт 01, 2008 06:02 ] |
Заголовок сообщения: | Глюк SPF? |
При попытке выполнить Код: SOME_ADDR -1 +! SPF вылетает. Вроде, в документации ничего не было сказано о запрете прибавления отрицательных чисел.
|
Автор: | mOleg [ Ср окт 01, 2008 06:05 ] |
Заголовок сообщения: | |
seu писал(а): SPF вылетает. Вроде, в документации ничего не было сказано о запрете прибавления отрицательных чисел.
вылетать действительно не должен, а должен выдвать исключение. вы поменяли параметры местами, надо было так: -1 SOME_ADDR +! |
Автор: | seu [ Ср окт 01, 2008 06:24 ] |
Заголовок сообщения: | |
Спасибо. А я как раз уже хотел попросить удалить тему... Вывод: век живи, век учись, дураком помрёшь. |
Автор: | seu [ Ср окт 01, 2008 07:08 ] |
Заголовок сообщения: | |
Опять какая-то фигня получается. Пишу программку, рассчитывающую ходы фигуры на поле с третьей координатой. Выглядит это так: Фигура может ходить в восьми направлениях. Вот исходник: Код: REQUIRE { lib/ext/locals.f Строки, перед которыми стоят комментарии, вызывают exception. Это пропадает, если из строк удалить слово @ (после чего, естественно, вся конструкция теряет смысл). Это -- глюк SPF или мой?
REQUIRE STRUCT: lib/ext/struct.f 2 CONSTANT OrigCoordX 2 CONSTANT OrigCoordY 0 CONSTANT OrigCoordZ 2 CONSTANT Steps STRUCT: Coord CELL -- X CELL -- Y CELL -- Z ;STRUCT STRUCT: Way Coord::/SIZE -- Up Coord::/SIZE -- Down Coord::/SIZE -- Left Coord::/SIZE -- Right Coord::/SIZE -- UpLeft Coord::/SIZE -- UpRight Coord::/SIZE -- DownLeft Coord::/SIZE -- DownRight ;STRUCT CREATE Ways Way::/SIZE ALLOT : BadCoord? ( X Y Z -- flag ) { tX tY tZ -- } tX tY MIN 0< tX tY MAX 4 > OR tZ 1 RSHIFT 0<> OR ; : X+1 ( addr -- ) Coord::X 1+! ; : X-1 ( addr -- ) Coord::X -1 SWAP +! ; : Y+1 ( addr -- ) Coord::Y 1+! ; : Y-1 ( addr -- ) Coord::Y -1 SWAP +! ; : Z=0 ( addr -- ) Coord::Z 0! ; : Z=1 ( addr -- ) Coord::Z 1 ! ; : SetUpCoords ( -- ) 8 0 DO Ways I Coord::/SIZE * + DUP Coord::X OrigCoordX SWAP ! DUP Coord::Y OrigCoordY SWAP ! Coord::Z OrigCoordZ SWAP ! LOOP ; : Print ( -- ) 8 0 DO Ways I Coord::/SIZE * + DUP Coord::X @ . DUP Coord::Y @ . Coord::Z @ . CR LOOP ; : KING ( -- ) SetUpCoords Steps 0 DO Ways Way::Up Y-1 Ways Way::Down Y+1 Ways Way::Left X-1 Ways Way::Right X+1 \ Ways Way::UpLeft DUP Coord::Z @ 0= IF DUP DUP X-1 Y-1 Z=1 ELSE Z=0 THEN \ Ways Way::UpRight DUP Coord::Z @ 0= IF DUP Y-1 Z=1 ELSE DUP X+1 Z=0 THEN \ Ways Way::DownLeft DUP Coord::Z @ 0= IF DUP X-1 Z=1 ELSE DUP Y+1 Z=0 THEN \ Ways Way::DownRight DUP Coord::Z @ 0= IF Z=1 ELSE DUP DUP X+1 Y+1 Z=0 THEN LOOP ; \ KING |
Автор: | mOleg [ Ср окт 01, 2008 07:55 ] |
Заголовок сообщения: | |
seu писал(а): Это -- глюк SPF или мой?
СПФ достаточно стабильная система, поэтому наверняка ваш, или библиотеки, которую вы используете. Выглядит вроде нормально текст, но попытка получить необходимое смещение прямо в консоли выдает какую-то чушь. |
Автор: | mOleg [ Ср окт 01, 2008 08:04 ] |
Заголовок сообщения: | |
вобщем, глянул я в struct.f . Я бы не назвал приведенную либу нормально рабочей попробуйте использовать мою .\devel\~moleg\lib\struct\struct.f Она посложнее, но зато там все есть. Вроде ошибок не находил (найдете скажу спасибо) |
Автор: | Pretorian [ Ср окт 01, 2008 08:25 ] |
Заголовок сообщения: | |
Попробуйте прочитать доку по struct.f http://spf.cvs.sourceforge.net/viewvc/s ... struct.pdf Незабывайте что данная структура хранит все данные в куче, а не в кодофайле, а значит нужна будет инициализация структур при сохранении наработанного образа системы. P.S. Покрайней мере с данной либой у меня проблем не было. |
Автор: | Mihail [ Ср окт 01, 2008 10:58 ] |
Заголовок сообщения: | |
seu писал(а): : Z=1 ( addr -- ) Coord::Z 1 ! ;
Опять перепутал парадок : Z=1 ( addr -- ) Coord::Z 1 SWAP ! ; |
Автор: | seu [ Ср окт 01, 2008 19:01 ] |
Заголовок сообщения: | |
Mihail Точно. Спасибо. Всё моя невнимательность. |
Автор: | Mihail [ Ср окт 01, 2008 20:03 ] |
Заголовок сообщения: | |
mOleg писал(а): Она посложнее, но зато там все есть
И этой ненужно Код: REQUIRE { lib/ext/locals.f
2 CONSTANT OrigCoordX 2 CONSTANT OrigCoordY 0 CONSTANT OrigCoordZ 2 CONSTANT Steps 0 CELL -- Coord_X CELL -- Coord_Y CELL -- Coord_Z CONSTANT /Coord 0 /Coord -- Way_Up /Coord -- Way_Down /Coord -- Way_Left /Coord -- Way_Right /Coord -- Way_UpLeft /Coord -- Way_UpRight /Coord -- Way_DownLeft /Coord -- Way_DownRight CONSTANT /Way CREATE Ways /Way ALLOT : BadCoord? ( X Y Z -- flag ) { tX tY tZ -- } tX tY MIN 0< tX tY MAX 4 > OR tZ 1 RSHIFT 0<> OR ; : X+1 ( addr -- ) Coord_X 1+! ; : X-1 ( addr -- ) Coord_X -1 SWAP +! ; : Y+1 ( addr -- ) Coord_Y 1+! ; : Y-1 ( addr -- ) Coord_Y -1 SWAP +! ; : Z=0 ( addr -- ) Coord_Z 0! ; : Z=1 ( addr -- ) Coord_Z 1 SWAP ! ; : SetUpCoords ( -- ) 8 0 DO Ways I /Coord * + DUP Coord_X OrigCoordX SWAP ! DUP Coord_Y OrigCoordY SWAP ! Coord_Z OrigCoordZ SWAP ! LOOP ; : Print ( -- ) 8 0 DO Ways I /Coord * + DUP Coord_X @ . DUP Coord_Y @ . Coord_Z @ . CR LOOP ; : KING ( -- ) SetUpCoords Steps 0 DO Ways Way_Up Y-1 Ways Way_Down Y+1 Ways Way_Left X-1 Ways Way_Right X+1 Ways Way_UpLeft DUP Coord_Z @ 0= IF DUP DUP X-1 Y-1 Z=1 ELSE Z=0 THEN Ways Way_UpRight DUP Coord_Z @ 0= IF DUP Y-1 Z=1 ELSE DUP X+1 Z=0 THEN Ways Way_DownLeft DUP Coord_Z @ 0= IF DUP X-1 Z=1 ELSE DUP Y+1 Z=0 THEN Ways Way_DownRight DUP Coord_Z @ 0= IF Z=1 ELSE DUP DUP X+1 Y+1 Z=0 THEN LOOP ; |
Автор: | Гость [ Ср май 13, 2009 14:56 ] |
Заголовок сообщения: | |
Код: : NOTFOUND OVER C@ [CHAR] * = IF TYPE CR ELSE NOTFOUND THEN ; ***** *** ** * Терминальный вывод Код: **** *** ** Exception #-4 .... * ^ -4 Исчерпание стека P.S. Ошибка? или недопонимание использования NOTFOUND? [/code] |
Автор: | garbler [ Ср май 13, 2009 17:47 ] |
Заголовок сообщения: | |
NOTFOUND вызывается после поиска слова, а не до. поскольку * уже есть в словаре, то она и выполняется (на пустом стеке). определи любое из указанных тобой слов и оно станет находиться и, как следствие - выполняться/компилироваться. Код: : INTERPRET_ ( -> ) \ интерпретировать входной поток BEGIN PARSE-NAME DUP WHILE SFIND ?DUP IF STATE @ = IF COMPILE, ELSE EXECUTE THEN ELSE S" NOTFOUND" SFIND IF EXECUTE ELSE 2DROP ?SLITERAL THEN THEN ?STACK REPEAT 2DROP ; всё это видно из исходника, приведённого выше, как следствие: Код: : NOTFOUND
OVER C@ [CHAR] * = IF TYPE CR ELSE NOTFOUND THEN ; : ** ." I'm twostar" CR ; ***** *** ** * BYE
Open source project at http://spf.sf.net Russian FIG at http://www.forth.org.ru ; Started by A.Cherezov Version 4.19 Build 001 at 14.Jan.2008 NOTFOUND isn't unique Ok Ok Ok ***** Ok *** Ok I'm twostar Ok * ^ -4 Stack underflow Ok p.s. или я "капитан очевидность" ? |
Автор: | Гость [ Чт май 14, 2009 07:21 ] |
Заголовок сообщения: | |
garbler писал(а): p.s. или я "капитан очевидность" ?
Точно. Мозги тоже могут глючить:) P.S. Фантомные сообщения можно удалять. |
Автор: | Kopa [ Вт май 19, 2009 15:01 ] |
Заголовок сообщения: | |
Появился небольшой вопрос. Подозрение на различие в интерпритации файла с 0x0D 0x0A разделителем строк и содержащий в качестве разделителя только 0x0A ( возможно в слове REFILL ) P.S. Это нормально? ( сборка 4.20 ) |
Автор: | Mihail [ Вт май 19, 2009 17:56 ] |
Заголовок сообщения: | |
Kopa писал(а): Подозрение на различие в интерпритации файла с 0x0D 0x0A разделителем строк и содержащий в качестве разделителя только 0x0A ( возможно в слове REFILL ) Была у меня какая-то проблема из-за этого различия. Подозрение проверяется: SOURCE DUP U. DUMP Kopa писал(а): Это нормально?
Различие надо-бы ликведировать. |
Страница 1 из 7 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |