Выбор следующей функции в зависимости от результата предыдущей

60 views
Skip to first unread message

Anatoly Vinogradov

unread,
Apr 8, 2012, 5:22:19 AM4/8/12
to Scala Enthusiasts Belarus
Добрый день!

Появилась задача реализовать такую конструкцию. Есть набор функций
одного типа, последовательность выполнения которых определяется в
процессе работы системы. А именно, какая функция будет выполнятся
следующей зависит от результатов выполнения предыдущих функций. Может
быть существует готовая абстракция, которая поможет решить данную
задачу, подскажите? Имеется подозрения, что если начну решать, то
изобрету велосипед.

Заранее спасибо.

Eugene Dubrovka

unread,
Apr 8, 2012, 8:17:27 AM4/8/12
to scala-enthus...@googlegroups.com
Может быть знающие меня поправят -- но это очень похоже на тему функционального реактивного программирования.

Раскопал в гугле http://www.cs.nott.ac.uk/~nhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf . На гитхабе видел на scala фреймворк для ФРП, но сейчас не вспомню как именно назывался.

--
happy coding.

8 апреля 2012 г. 12:22 пользователь Anatoly Vinogradov <anatoly.v...@gmail.com> написал:

Zmitro Lapcjonak

unread,
Apr 11, 2012, 6:40:36 AM4/11/12
to scala-enthus...@googlegroups.com


On Sunday, April 8, 2012 12:22:19 PM UTC+3, Anatoly Vinogradov wrote:
Добрый день!

Появилась задача реализовать такую конструкцию. Есть набор функций
одного типа, последовательность выполнения которых определяется в
процессе работы системы. А именно, какая функция будет выполнятся
следующей зависит от результатов выполнения предыдущих функций.


а это не есть "Конечный автомат"?

псевдокод на кложуре:

(defn fun1 [] ,,, )
(defn fun2 [] ,,, )

(def rules {:key1 fun1, :key2 fun2, ,,,})
(def initial-state { ,,, })

(defn dispatcher [state]
  :key1) ; or :key2 or ,,,

(defn controller [state rules]
  (if (is-stop-state state)
    state
    (let [next-key (dispatcher state),
          next-fun (get rules next-key)
          next-state (apply next-fun state)]
      (recur next-state rules)) ))

Reply all
Reply to author
Forward
0 new messages