Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 21:20

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 95 ]  На страницу 1, 2, 3, 4, 5 ... 7  След.
Автор Сообщение
 Заголовок сообщения: Глюк SPF?
СообщениеДобавлено: Ср окт 01, 2008 06:02 
При попытке выполнить
Код:
SOME_ADDR -1 +!
SPF вылетает. Вроде, в документации ничего не было сказано о запрете прибавления отрицательных чисел.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср окт 01, 2008 06:05 
Не в сети
Moderator
Moderator
Аватара пользователя

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

вылетать действительно не должен, а должен выдвать исключение.
вы поменяли параметры местами, надо было так:
-1 SOME_ADDR +!

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср окт 01, 2008 06:24 
Спасибо. А я как раз уже хотел попросить удалить тему... :D

Вывод: век живи, век учись, дураком помрёшь.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср окт 01, 2008 07:08 
Не в сети

Зарегистрирован: Ср окт 01, 2008 06:49
Сообщения: 10
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Опять какая-то фигня получается. Пишу программку, рассчитывающую ходы фигуры на поле с третьей координатой. Выглядит это так:
Изображение
Фигура может ходить в восьми направлениях. Вот исходник:
Код:
REQUIRE { lib/ext/locals.f
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

    Print
  LOOP ;

\ KING
Строки, перед которыми стоят комментарии, вызывают exception. Это пропадает, если из строк удалить слово @ (после чего, естественно, вся конструкция теряет смысл). Это -- глюк SPF или мой?


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

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

СПФ достаточно стабильная система, поэтому наверняка ваш, или библиотеки, которую вы используете.
Выглядит вроде нормально текст, но попытка получить необходимое смещение прямо в консоли выдает какую-то чушь.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
вобщем, глянул я в struct.f . Я бы не назвал приведенную либу нормально рабочей :(
попробуйте использовать мою .\devel\~moleg\lib\struct\struct.f
Она посложнее, но зато там все есть. Вроде ошибок не находил (найдете скажу спасибо)

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср окт 01, 2008 08:25 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Попробуйте прочитать доку по struct.f
http://spf.cvs.sourceforge.net/viewvc/s ... struct.pdf
Незабывайте что данная структура хранит все данные в куче, а не в кодофайле, а значит нужна будет инициализация структур при сохранении наработанного образа системы.
P.S. Покрайней мере с данной либой у меня проблем не было.

_________________
Меня нет, не будет и не было.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср окт 01, 2008 10:58 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
seu писал(а):
: Z=1 ( addr -- ) Coord::Z 1 ! ;


Опять перепутал парадок
: Z=1 ( addr -- ) Coord::Z 1 SWAP ! ;


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

Зарегистрирован: Ср окт 01, 2008 06:49
Сообщения: 10
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Mihail
Точно. Спасибо. Всё моя невнимательность.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср окт 01, 2008 20:03 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
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

    Print
  LOOP ;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср май 13, 2009 14:56 
Код:
: NOTFOUND 
           OVER C@ [CHAR] * = IF TYPE CR       
                               ELSE NOTFOUND
                               THEN
;
*****
***
**
*


Терминальный вывод
Код:
****
***
**
Exception #-4 ....
*
^  -4 Исчерпание стека


P.S. Ошибка?
или недопонимание использования NOTFOUND?


[/code]


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср май 13, 2009 17:47 
Не в сети
Аватара пользователя

Зарегистрирован: Вт сен 11, 2007 11:07
Сообщения: 187
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
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

    SP-FORTH - ANS FORTH 94 for Win95/98/ME/NT/2000/XP
    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. Фантомные сообщения можно удалять.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 19, 2009 15:01 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
Появился небольшой вопрос.

Подозрение на различие в интерпритации файла
с 0x0D 0x0A разделителем строк
и содержащий в качестве разделителя только 0x0A
( возможно в слове REFILL )

P.S. Это нормально? ( сборка 4.20 )


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 19, 2009 17:56 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Kopa писал(а):
Подозрение на различие в интерпритации файла
с 0x0D 0x0A разделителем строк
и содержащий в качестве разделителя только 0x0A
( возможно в слове REFILL )


Была у меня какая-то проблема из-за этого различия.
Подозрение проверяется:

SOURCE DUP U. DUMP

Kopa писал(а):
Это нормально?


Различие надо-бы ликведировать.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 95 ]  На страницу 1, 2, 3, 4, 5 ... 7  След.

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


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

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


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

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