VAK-53/anti-turing
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
anti_turing - программа моделирования на Erlang решения квадратного уравнения в потоке данных на основе альтернативной парадигмы.
Описание программы.
Внешние функции модуля движка называются start_a/0, start_b/0 и start_c/0 в соответствии с названиями входных параметров a, b и c. В них же производится инициализация данных a, b и c атомом (начального значения) undefined. (Все потоковые данные инициализируются значением атома undefined.)
При запуске программного модуля в начале строится дерево потока данных в соответствии с деревом решения.
Входные параметры a, b и c считываются с терминалов асинхронно циклически.
Содержательная часть программы, реализующая алгоритм потока решения, соответствует дереву потока данных. Работа алгоритма реализована через механизм посылки сообщений от узла к узлу, а доступ к memo–данным x1–memo и x2–memo канонически скрыт оберткой в виде экспортируемой функции get().
Гонка входных аргументов на вход процесса решается простой проверкой отсутствия среди входных данных экземпляра со значением undefined. После срабатывания процесса в узле всем входным аргументам снова присваиваются значение undefined для выполнения новой итерации расчетов.
Memo–данные x1–memo и x2–memo хранятся в виде переменных состояния в процессах с хвостовой рекурсией. (Собственно говоря, все процессы в программе являются процессами с хвостовой рекурсией.) Внешний несвязанный процесс запускается в отдельном узле, запрашивает memo-данные и выводит полученное значение на экран.
Запуск программы
Для испытания программный модель Анти–Тьюринг запускается три терминальных окнах для задания входных данных:
erl -sname a@localhost,
erl -sname b@localhost,
erl -sname c@localhost
и окно проверки результатов решения:
erl -sname out@localhost.
Не забудьте скомпилировать модуль, если он ещё не скомпилирован, в первом окне после запуска Erlang:
c(anti_turing).
В первых трех окнах вводятся числа с плавающей запятой.
Результаты считываются запросами в третьем окне:
anti_turing:get_x1().
и
anti_turing:get_x2().