2010-02-17 2 views
8

Я ищу библиотеку/сборку, которая позволяет мне работать с логическими переменными в F #. Я хочу избежать повторного использования колеса при реализации требуемой унифицированной структуры данных, унификационного кода и т. Д.Поддержка логических переменных для .NET.

Я нашел Prolog.NET, но руководство немного разрежено. Я не хочу полноценной реализации Prolog, но только ее обработка логических переменных и руководства в этом отношении не хватает.

Вот что я хочу быть в состоянии сделать:

  • объявить новые логические переменные
  • связывают log.var. к термину (по-видимому, библиотека допускает для этого полные термины Гербранда)
  • выравнивает log.vars. (т. е. объединение)
  • мета-обработка log.vars. (он заземлен?), в котором другие log.vars были уравнены? ...)
  • В конечном итоге библиотека поддерживает даже совместимость, то есть одностороннее объединение.

Кто-нибудь знает какую-либо библиотеку, которая делает все это, или библиотеки, которые, по крайней мере, могут использоваться в качестве отправной точки?

+0

Кто-нибудь знает о любом прогрессе в этом, поскольку последние ответы ниже? (2010) – mavnn

ответ

2

Mini-Kanren был implemented for Scala. Я не программист .NET и не могу сказать, насколько это полезно для вас, но Mini-Kanren соответствует вашим требованиям с точки зрения программного языка логической переменной: если вложение Scala в .NET имеет свойства, совместимые с тем, что вы после, тогда вы должны быть там.

3

Я не знаю библиотеки, которая делает то, что вы хотите. Однако у меня есть реализация «union-find in F #» в this blog entry. И с моих дней колледжа я, кажется, вспоминаю, что в какой-то популярной книге на Схеме был базовый алгоритм унификации, который я использовал для кодирования реализации «мини-пролога» в тот же день. Поэтому я чувствую, что это то, что кто-то с правильным опытом может собраться в выходные, если кто-то ищет проект. (Возможно, я добавлю его в свой выходной список TODO в выходные дни).

+0

Возможно, вы думаете о The Reasoned Schemer? Он определяет DSL, называемый mini-kanren, который хорошо сочетается с Scheme, а перевод на F # не должен быть сложным. –

+1

Все в порядке. Но, как я сказал выше, я искал существующий код. Дело не в том, что я не могу реализовать все это самостоятельно, но было бы пустой тратой времени, если бы кто-то еще уже выполнял эту работу. – Frank

4

У меня есть базовое вложение логического программирования в F #. Я разработал его для курса, который я преподаю «Программирование парадигм», который использует F # всюду и включает в себя пару лекций по логическому программированию.

Код использует императивные обновления, чтобы отражать замены из-за унификации, и использует продолжения успеха. Таким образом, он относительно отличается от, например, Kanren.

Я не знаю, сколько смысла нота будет делать самим по себе, но вы можете найти это вложение в конце: http://undergraduate.csse.uwa.edu.au/units/CITS3242/16-logic-prog.pdf

я могу предоставить уточненный вариант этого вложения по запросу.