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

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - триггеры
Автор Сообщение
  Заголовок сообщения:  Re: триггеры  Ответить с цитатой
развитие идеи (перебор вариантов)
source file: round.fts
\ 07.04.2012 ~mOleg
\ Copyright [C] 012 mOleg mOlegg@ya.ru
\ выбор из списка обработчиков (по мотивам trigger.fts)

ALSO HIDDEN DEFINITIONS

\ выбрать метод согласно значению, сохраненному в поле данных
: {f} ( r: addr --> )
R> [ TOKEN 3 * ] LITERAL +
DUP @ ABS OVER CELL + @ MOD ADDR * [ 2 CELL * ] LITERAL +
+ A@ EXECUTE ;
\ сместить указатель влево на след ф-цию
: {r} ( r: addr --> ) -1 R> [ TOKEN 2 * ] LITERAL + +! ;
\ сместить указатель вправо на пред. ф-цию.
: {l} ( r: addr --> ) 1 R> TOKEN + +! ;
\ вернуть адрес, где хранится номер текущей ф-ции
: {p} ( r: addr --> addr ) R> ;

ALSO FORTH DEFINITIONS

\ определитель конца перечисления
: ;ROUND ; IMMEDIATE

\ создает определение с именем name, связанным со списком слов, находящихся
\ в перечислении вслед за name вплодь до ;ROUND
\ в последствии при упоминании name будет выполняться одно из перечисленных
\ слов
: ROUND: ( / name --> )
HEADER
COMPILE {f}
COMPILE {r}
COMPILE {l}
COMPILE {p}
0xFFFFFF , \
HERE >R
0 , \
BEGIN NEXT-WORD *WHILE
SFIND *IF ELSE ERROR" Слово не найдено!" THEN
imm_word = WHILENOT
A, 1 R@ +!
REPEAT ['] ;ROUND =
IFNOT ERROR" Ожидается завершающий ;ROUND" THEN
THEN RDROP ;CREATE ;

\ методы работы:
\ прочесть содержимое VALUE переменной
: @pos ( / name --> xt ) ' [ 3 TOKEN * LIT, ] + REGULAR ; IMMEDIATE
ALIAS TO << IMMEDIATE
ALIAS FROM >> IMMEDIATE

PREVIOUS RECENT

?ABSENT test{ \EOF -- тестовая секция ---------------------------------------
test{


: one ." ?111? " ;
: two ." ?222? " ;
: thr ." ?333? " ;
: fou ." ?444? " ;
: fif ." ?555? " ;

ROUND: TEST one two thr fou fif ;ROUND

TEST
<< TEST TEST << TEST TEST << TEST TEST
>> TEST TEST >> TEST TEST >> TEST TEST

}test

понадобилось вот перебирать варианты отображения чисел и отрисовки формы курсора...
Сообщение Добавлено: Пн апр 09, 2012 17:52
  Заголовок сообщения:  Re: триггеры  Ответить с цитатой
Alexander писал(а):
На практике всё равно индексированная табилца токенов будет приятней.

нет.
Я все получившиеся переключатели скидываю в один словарь, оставляю там только TOGGLE , и позволяю пользователю их переключать в ему угодном порядке и комбинации. Если комбинацией переключений систему из строя вывести нельзя - она будет устойчивой, а вот если я открою возможность присваивать VECT переменной или какой-то индексированной таблице произвольные cfa (т.е. оставлю интерфейс открытым), то натворят такого...
Сообщение Добавлено: Вт дек 27, 2011 15:45
  Заголовок сообщения:  Re: триггеры  Ответить с цитатой
Всё имеет право на существоание. Но применяем мы это или нет,- тут дело каждого.
На практике всё равно индексированная табилца токенов будет приятней. Хотя с автоматизацией чего-то, что решено здесь новой конструкцией будет сложней.
Сообщение Добавлено: Пн дек 26, 2011 20:23
  Заголовок сообщения:  Re: триггеры  Ответить с цитатой
gudleifr писал(а):
TOGGLE светдлиннее и дольше интерпретируется, чем

Это без разницы, редкое событие, раз, интерпретируется не слишком дольше, т.к. так в код компилируется вызов метода (tgl), два, при нехватке скорости можно в код загнать обработчики, три.
Сообщение Добавлено: Сб дек 24, 2011 19:49
  Заголовок сообщения:  Re: триггеры  Ответить с цитатой
mOleg писал(а):
В каком смысле?
TOGGLE свет
длиннее и дольше интерпретируется, чем
SWITCH
плюс, в Вашем случае возможна путаница с установкой начального состояния
Сообщение Добавлено: Сб дек 24, 2011 19:43
  Заголовок сообщения:  Re: триггеры  Ответить с цитатой
gudleifr писал(а):
Допустим, пяток строк на определении конкретного триггера Вы сэкономите, но сколько потеряете на обращениях к нему?

В каком смысле?

gudleifr писал(а):
P.S. Опять мы сползли в нравится/не нравится.

Такова жизнь. То, что не нравится не сподручно использовать.
Сообщение Добавлено: Сб дек 24, 2011 19:40
  Заголовок сообщения:  Re: триггеры  Ответить с цитатой
mOleg писал(а):
правда, в моем случае [триггер] не электронное устройство.

Я больше имел в виду другие "триггера" - процедуры поддержки целостности БД, связанные с событиями модификации БД.
mOleg писал(а):
С этого чуда [DOER] я не тащусь никак, не по вкусу он мне.
Да и всеравно мой вариант получается короче в итоге.

Зато, DOER гораздо универсальнее (и короче). Допустим, пяток строк на определении конкретного триггера Вы сэкономите, но сколько потеряете на обращениях к нему? Сама постановка Вами примера - глобальный переключатель - делает бессмысленной экономию места на определении в ущерб гибкости.
P.S. Опять мы сползли в "нравится"/"не нравится".
Сообщение Добавлено: Сб дек 24, 2011 19:36
  Заголовок сообщения:  Re: триггеры  Ответить с цитатой
gudleifr писал(а):
т.е. никак не триггер

цитата из википедии (не буду оригинальничать)
Код:
Триггер (триггерная система) — класс электронных устройств, обладающих способностью длительно находиться в одном из двух устойчивых состояний и чередовать их под воздействием внешних сигналов.

правда, в моем случае не электронное устройство.

gudleifr писал(а):
обычный DOER

С этого чуда я не тащусь никак, не по вкусу он мне.
Да и всеравно мой вариант получается короче в итоге.

Код:
:> a ." включено" ;
:> b ." выключено" ;

a b TRIGGER свет
...
TOGGLE свет
...
где-то свет
...
TOGGLE свет
..
где-то рас свет
..
CHECK свет
Сообщение Добавлено: Сб дек 24, 2011 19:26
  Заголовок сообщения:  Re: триггеры  Ответить с цитатой
mOleg писал(а):
...

Вроде понял, спасибо.
mOleg писал(а):
пример, ну, скажем, есть два варианта отображения объемного изображения:
1) каркасное
2) нормальное
и нужно между ними туда сюда переключаться по необходимости нажимая одну кнопку, при этом, переключать можно из кучи мест (не из одного), и, главное, других альтернатив быть не должно.

Ну, здесь, скорее, обычный DOER, т.е. никак не триггер, а "указатель на функцию".
Код:
DOER FUNC DOER SWITCH DOER ON!
: OFF! MAKE FUNC DO-B1 DO-B1 ... DO-Bm ;AND MAKE SWITCH ON! ;
MAKE ON! MAKE FUNC DO-A1 DO-A2 ... DO-An ;AND MAKE SWITCH OFF! ;

Кстати, "настоящие триггера" действительно иногда нужны. Вот, например, что может понадобиться для кибернетических моделей:
1) нейрон, реагирующий на превышение порога посылкой сигнала и переходом в режим восстановления (т.к. параметры всех этих возбуждений/затуханий будут размазаны по разным таблицам, то здесь, скорее будет голая переадресация).
2) тоже самое, но для перехода от честного квантования времени в режим от события - к событию. Вероятностное событие переключения, генерация отложенного события...
3) триггер, как часть гомеостата, различающий возмущение устранимое без изменения состояния от возмущения, вызывающего перерасчет состояний.
Понятно, пока проект подобной лабуды не будет доведен до ума, говорить о том, как будут выглядеть триггеры для нее, не имеет смысла. Но одно можно постулировать. Изобретать "триггер" заранее - бесполезно.
Сообщение Добавлено: Сб дек 24, 2011 19:10
  Заголовок сообщения:  Re: триггеры  Ответить с цитатой
gudleifr писал(а):
1. Зачем называть триггером вещь, которая не работает как триггер?

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

Код:
: a ." one" ;
: b ." two" ;
VECT SOMETHING

и где-то в коде писать:
Код:
FROM SOMETHING ['] a = IF ['] b IS SOMETHING ELSE ['] a IS SOMETHING THEN

и таких мест много, да и самих SOMETHING не одно. При этом, действия таки только два возможных. Заводить на каждое из них отдельное определение нудно, итак кода уже много.

gudleifr писал(а):
Опять куча новых (конечно, для меня) слов.

странно, а чего там непонятного-то?

gudleifr писал(а):
Надо бы пример полезного применения.

пример, ну, скажем, есть два варианта отображения объемного изображения:
1) каркасное
2) нормальное
и нужно между ними туда сюда переключаться по необходимости нажимая одну кнопку, при этом, переключать можно из кучи мест (не из одного), и, главное, других альтернатив быть не должно.
Сообщение Добавлено: Сб дек 24, 2011 18:56
  Заголовок сообщения:  Re: триггеры  Ответить с цитатой
mOleg писал(а):
...триггеры...

1. Зачем называть триггером вещь, которая не работает как триггер? Насколько я понимаю, триггер - штука, которая что-то меняет (в себе или снаружи) при возникновении внешнего события, а совсем не "переменная - указатель на функцию".
2. Опять куча новых (конечно, для меня) слов. Может, если мы постулировали невозможность договориться на уровне языка, все-таки, обмениваться алгоритмами в более общепринятой форме?
3. Изобретать фичу ради фичи, имхо, бессмысленно. Надо бы пример полезного применения. Правда, в силу (2) я, скорее всего, совсем ничего в нем не пойму.
Сообщение Добавлено: Сб дек 24, 2011 17:30
  Заголовок сообщения:  триггеры  Ответить с цитатой
родилась сегодня такая штука:
source file: trigger.fts
\ 24.12.2011 ~mOleg
\ Copyright [C] 2011 mOleg mOlegg@ya.ru
\ триггеры

\ исполнить одну из предопределенных функций
: (prf) ( --> ) AR> [ TOKEN 2 * ] LITERAL + DUP @ + CELL + PERFORM ;

\ переключить состояние триггера
: (tgl) ( --> ) AR> TOKEN + DUP @ ADDR XOR SWAP ! ;

\ определить состояние переключателя
: (stt) ( --> ) AR> @ ADDR = ;

\ создать переключатель, выполняющий одну из двух возможных функций: on / off
: TRIGGER ( 'on 'off --> )
HEADER
COMPILE (prf)
COMPILE (tgl)
COMPILE (stt)
0 ,
A,
A,
;CREATE ;

\ переключить состояние триггера
: TOGGLE ( / name --> ) [COMPILE] TO ; IMMEDIATE

\ проверить состояние переключателя
: CHECK ( / name --> ) [COMPILE] FROM ; IMMEDIATE

?ABSENT test{ \EOF -- тестовая секция ---------------------------------------
test{

:> a 987097 ;
:> b 833124 ;

a b TRIGGER TST

1234 TST 1234 b EXECUTE D= 0 = THROW
TOGGLE TST
1234 TST 1234 a EXECUTE D= 0 = THROW
TOGGLE TST
1234 TST 1234 b EXECUTE D= 0 = THROW

CHECK TST THROW
TOGGLE TST
CHECK TST 0 = THROW
}test
Сообщение Добавлено: Сб дек 24, 2011 16:58

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


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