2010-02-17 13 views
8

Poszukuję biblioteki/zestawu, który pozwala mi pracować ze zmiennymi logicznymi w F #. Chciałbym uniknąć ponownego odkrywania koła w zakresie wdrażania wymaganej struktury wyszukiwania, unifikacji i tak dalej.Obsługa zmiennych logicznych dla .NET

Znalazłem Prolog.NET, ale instrukcja jest nieco skąpa. Nie chcę pełnowartościowej implementacji Prologu, ale tylko jej traktowanie zmiennych logicznych i instrukcji jest w pewnym sensie nieskuteczne.

Oto co chcę móc to zrobić:

  • deklarować nowe zmienne logiczne
  • powiązać log.var. do terminu (perfe- ralnie biblioteka dopuszcza do tego pełne warunki Herbranda)
  • wyrównać log.vars. (tj. zjednoczenie)
  • meta-traktowanie log.vars. (czy jest to ziemia, do której inne log.vars zostało wyrównane? ...)
  • ostatecznie biblioteka obsługuje nawet dopasowanie, tj. jednostronne ujednolicenie.

Czy ktoś zna bibliotekę, która wykonuje to wszystko, lub biblioteki, które mogą być używane jako punkt wyjścia?

+0

Czy ktoś wie o postępach w tej sprawie od czasu ostatniej odpowiedzi poniżej? (2010) – mavnn

Odpowiedz

2

Mini-Kanren został implemented for Scala. Nie jestem programistą .NET i nie mogę powiedzieć, jak użyteczne jest to dla ciebie, ale Mini-Kanren pasuje do twoich wymagań w zakresie programowego logicznego języka zmiennego: jeśli Scala osadzanie w .NET ma właściwości zgodne z tym, co jesteście po, wtedy powinniście tam być.

3

Nie znam biblioteki, która robi to, co chcesz. Jednak mam implementację "union-find in F #" w this blog entry. I od czasów mojego college'u, wydaje mi się, że przypomniałem sobie, że popularna książka na Scheme zawierała podstawowy algorytm unifikujący, którego używałem do kodowania implementacji "mini-prolog" w ciągu dnia. Czuję, że jest to coś, co ktoś z odpowiednim doświadczeniem może złożyć w weekend, na wypadek gdyby ktoś szukał projektu. (Być może dodam go do mojej własnej listy TODO na weekend.)

+0

Może myślisz o Reasonowanym Schemerze? Definiuje DSL o nazwie mini-kanren, który bardzo dobrze integruje się ze Schematem, a tłumaczenie na F # nie powinno być trudne. –

+1

Wszystko w porządku. Ale jak już wspomniałem powyżej, szukałem istniejącego kodu. Nie chodzi o to, że nie jestem w stanie zrealizować tego wszystkiego samodzielnie, ale byłoby to stratą czasu, gdyby ktoś inny już to zrobił. – Frank

4

Mam podstawowe osadzanie programowania logicznego w F #. Opracowałem go na kurs, którego nauczam na temat "Programowania paradygmatów", który wykorzystuje F # i zawiera kilka wykładów z programowania logiki.

Ten kod używa imperatywnych aktualizacji do odzwierciedlania substytucji z powodu unifikacji i korzysta z kontynuacji sukcesu. Jest więc względnie różny od, np. Kanren.

Nie jestem pewien, ile poczucie notatki uczyni przez siebie, ale można znaleźć to osadzanie na koniec: http://undergraduate.csse.uwa.edu.au/units/CITS3242/16-logic-prog.pdf

mogę stworzyć wyrafinowaną wersję tego wbudowania na zamówienie.

Powiązane problemy