Параметрическое задание имен переменных

Обсуждение программ nnCron и nnCron LITE

Параметрическое задание имен переменных

Postby doctornol » Thu, 28 Oct 2004, 16:08

Вопрос относится не столько к nnCron сколько к Форту, но все же...
Можно ли, каким-то образом, задавать имена переменных используя динамически формируемый параметр. Я попытался это сделать (см. ниже), но получил сообщение о синтаксической ошибке и о мусоре в стеке. Ну понятно сам виноват. Подсунул какой-то бред....
В качестве параметра я пытался использовать переменную maxi и хотел присвоить переменным max1 max2 max3 значение переменной valt. Проверка указывает на ошибку в строке valt @ max%maxi @% !.

#( проверка
NoActive
NoLog
RunOnce
NoDel
AsLoggedUser
VARIABLE max1
VARIABLE max2
VARIABLE max3
VARIABLE maxi
VARIABLE valt
Action:
1 maxi !
BEGIN
maxi @ valt !
valt @ max%maxi @% !
maxi @ 1 + maxi !
maxi @ 3 >
UNTIL
MSG: "%max1 @%"
MSG: "%max2 @%"
MSG: "%max3 @%"
)#

Благодарю за помощь
doctornol
 
Posts: 11
Joined: Wed, 08 Sep 2004, 15:40
Location: г.Киев

Postby makrus » Thu, 28 Oct 2004, 23:14

Вопрос конечно интересный, в Форте я тоже не силен, а в ругательствах nnCron'а немного разбираюсь :lol: : поскольку nnCron не знает такого Форт слова max%maxi @%, и переменной соответствующей ты не обозначил, вот он и не понял что ты ему подсунул. Если подобное вообще возможно, то надо мудрить что-то со словом IMMEDIATE
И строку:
Code: Select all
maxi @ 3 >
надо заменить, например, на
Code: Select all
maxi @ 2 >


P.S. правильно ли я понял, что ты хотел увидеть на экране последовательно:
1
2
3
(подождем что скажут Админы :))
все познается в сравнении
makrus
 
Posts: 336
Joined: Mon, 12 Jul 2004, 14:46
Location: Волгоград

Postby Tez » Fri, 29 Oct 2004, 02:18

EVALUATE

Из ANS Forth '94
6.1.1360 EVALUATE CORE
( i*x c-addr u -- j*x )
Сохраняет текущую спецификацию входного источника. Записывает минус
- один (-1) в SOURCE-ID, если он присутствует. Делает строку,
описанную c-addr и u входным источником и входным буфером,
устанавливает >IN в нуль, и интерпретирует. Когда область анализа
пуста, восстанавливает предыдущую спецификацию входного источника.
Изменения состояния стека определяются интерпретируемыми словами.

Если короче. Это текстовая интепретация.
EVALUATE принимает строку со счетчиком ( a u ), например:
VARIABLE test1
VARIABLE maxi
S" test%maxi @ 1 +%" EVAL-SUBST EVALUATE
- в данном случае получим то же самое, как если бы мы выполнили test1, т.е. адрес переменной.
А можно что угодно делать (наверное :wink:):
1 2 3 S" 4 5 + + + +" EVALUATE .

ЗЫ
С IMMEDIATE слово будет исполняться в период компиляции.
Попробуйте вставить это в nncron.ini (или во внешнюю задачу до слова main):
Code: Select all
: привет MSG: "Привет!%crlf%А я сейчас компилирую nncron.ini" ; IMMEDIATE
привет
S" самое простое - даже так" MsgBox
Tez
 
Posts: 205
Joined: Mon, 23 Aug 2004, 09:17
Location: Moscow

Postby doctornol » Fri, 29 Oct 2004, 09:32

Tez wrote:S" test%maxi @ 1 +%" EVAL-SUBST EVALUATE
- в данном случае получим то же самое, как если бы мы выполнили test1, т.е. адрес переменной.
А можно что угодно делать (наверное :wink:):
1 2 3 S" 4 5 + + + +" EVALUATE


Благадарю за исчерпываще профессиональную информацию !!!!
doctornol
 
Posts: 11
Joined: Wed, 08 Sep 2004, 15:40
Location: г.Киев


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 3 guests