К сожалению, вы кажетесь экспертом в нише, о которой знают очень немногие пользователи Haskell. Все, что я знаю об этих технологиях, это то, что я слышал от нетехнических людей, говорящих о различных механизмах бизнес-правил, поэтому я, вероятно, неправ, но я думаю, что стоит попробовать, поскольку все остальные в тупике.
Что касается систем рассуждений с прямой цепочкой и, в частности, алгоритма Рете, то они в основном уже функционируют. Они выполняют итерации и добавляют новые знания в базу данных по мере их продвижения, пока у них не закончатся дела. Если вы не разрешаете произвольные эффекты, это будет простой порт Control.Monad.State
; если вам нужны произвольные эффекты, вы можете вместо этого использовать преобразователь монады состояния, и это не что-то промежуточное/продвинутое, Haskellers будет всем, что запугано. Вы можете найти то, что можете использовать на сайте Haskell, но если вам придется делать это самостоятельно глава Monad Transformers книги Real World Haskell незаменим.
Я ничего не знаю о деревьях поведения, но, взглянув на Википедию, они выглядят как алгоритм Рете плюс параллельные процессы в фоновом режиме. Если это даже близко к правильному, вам нужно решить, нужен ли вам параллелизм или параллелизм. Если вы довольны тем, что чистые значения "волшебным образом" вычисляются быстрее (и, соответственно, все, что написано на Haskell), то вы можете обойтись без использования материала в Control.Parallel
без особых усилий, но вы не сможете ( скажем) узнать, какие процессы запущены, а какие нет. Если вам действительно нужно другое наблюдаемое поведение, вам понадобится Control.Concurrent
, и это менее волшебно, поэтому больше учета. Саймон Марлоу написал довольно хороший учебник о ваших возможностях. То, что вы описываете, звучит для меня более низкоуровнево, чем большинство интересных вещей, которые Haskell может сделать для вас; если вы решите принять интерфейс более высокого уровня, вам будет проще его реализовать. Я тоже далеко не специалист в этом вопросе.
person
Daniel Lyons
schedule
10.05.2012
unfoldTree
вас интересует? - person Daniel Wagner   schedule 10.05.2012