Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Oberon
Перезагрузить страницу Один из способов программирования конечного автомата
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
S.Yu.Gubanov S.Yu.Gubanov вне форума
Member
 
Сообщений: 587
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.12.2002
По умолчанию Один из способов программирования конечного автомата - 22.07.2004, 12:51

Вот, недавно обратил внимание на то, что в языке (Component Pascal) разрешается определить следующий тип процедурной переменной:
Код:
TYPE
  Automat = PROCEDURE(): Automat;
Переменная этого процедурного типа есть процедура, которая возвращает переменную, которая есть переменная этого же самого типа, которая есть процедура, которая возвращает переменную, которая... и т.д. до бесконечности. (в Дельфи такой тип определить нельзя, а уж про Си и говорить не приходится).

Спрашивается для чего нужен такой тип? А вот, например, для программирования конечного автомата. Представим конечный автомат множеством процедур. Каждая процедура делает какие-либо действия (из предметной области), и еще принимает решение о том какую процедуру надо запустить после самой себя - т. е. делает переход из одного состояния конечного автомата в другое.

Код:
VAR p: Automat;
...
WHILE p # NIL DO p := p() END
Изящная идиома получается, однако. А если еще учесть, что процедуры могут быть из разных (заранее не известных) модулей, то получается довольно таки забавно.

Пример кода:
Код:
TYPE
  Automat = PROCEDURE(): Automat;

PROCEDURE p1(): Automat;
BEGIN
  StdLog.String('executing p1()'); StdLog.Ln();
  RETURN NIL;
END p1;

PROCEDURE p2(): Automat;
BEGIN
  StdLog.String('executing p2()'); StdLog.Ln();
  RETURN p1;
END p2;

PROCEDURE Work*; 
VAR p: Automat;
BEGIN 
  p := p2;
  WHILE p # NIL DO p := p() END  
END Work;
Ответить с цитированием
  (#2 (permalink)) Старый
ДВП ДВП вне форума
Member
 
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 18.01.2005
По умолчанию 18.01.2005, 11:06

1) Вообще-то в С++ есть указатели на функции, которые могут возвращать те же самые указатели (понятное дело, на другие функции).
2) Есть еще шаблон Strategy, применимый в любом ООП (включая VB6, например).

В общем, критический запал непонятен. Идея, безусловно, привлекательна наглядностью.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для музыкального автомата ctac2178 Задания за деньги 1 14.09.2011 12:23
Один из способов узнать, кто сколько работает c++ Юмор 4 12.09.2007 16:40
языки программирования Матрикс Pascal 15 18.06.2007 11:46
Минимизация конечного автомата 8as+@rd Pascal 1 25.01.2007 18:21
О языках программирования Dian Юмор 3 27.04.2006 17:50
Алгоритм минимизации частично определенного автомата imported_TraNceR Алгоритмы 2 01.04.2006 11:58
Обзор способов печати отчетов EVadik C++ Builder 4 11.11.2004 19:11
Дао программирования Garik Юмор 10 06.08.2004 19:15
Технологии программирования Andrey1 Мысли вслух 1 07.07.2004 06:48
Оптимальная декомпозиция конечного алгоритма Diver Алгоритмы 2 30.05.2004 15:14
Генерация подмножеств конечного множества zeka Алгоритмы 1 17.05.2004 11:05
Минимизация автомата Милли на Prolog imported_Alexandra Prolog 3 18.02.2004 15:41



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов