[PROLOG] Wyrażenie predykatowe do postaci klauzul

Witam serdecznie!

 

Na studiach dostałem zadanie do wykonania w Prologu o treści:

 

Napisać program przekształcający dowolne wyrażenia predykatowe (wpz) do postaci klauzul. Wyrarażenia wejściowe i wyjściowe zadawane są w postaci łańcuchów.

 

Mój problem polega na tym, że kompletnie nie wiem jak za to zadanie w tym języku się zabrać. Nie ukrywam, że moje obycie z tym językiem jest niestety… bardzo małe.

 

Wiem, że na początku podane wyrażenie muszę przekształcić do postaci znormalizowanej a następnie skolemizować. Pytanie tylko jak zrobić to w Prologu.

 

Inna sprawa, czy w prologu istnieje jakiś odpowiednik kwantyfikatorów forall/exists czy powinienem je przedstawiać jako najmniejsze zło klawiaturowe A/E ???

 

Za wszelką pomoc z tym zadaniem będę niezwykle wdzięczny!

 

Nie znam się na prologu, a poza tym, systemy ekspertowe miałem dosyć dawno. Może podasz wyjaśnienie, jak przekształcać do postaci znormalizowanej(chyba postać tylko z negacjami i and lub or), a także jak skomelizować(tutaj nie pamiętam, o co chodzi). Wtedy więcej osób będzie Ci w stanie pomóc.

 

Następujące kroki w celu przekształcenia wpz do postaci klauzulowej:

1.Eliminacja symboli implikacji

2. Redukcja zakresu działania symbolu negacji

3. . Standaryzacja zmiennych -> tzn. Każdy kwantyfikator ma swoją zmienną o innej nazwie

Następnie przeprowadzić skolemizację (przykład -> http://www.cs.put.poznan.pl/jjozefowska/wyklady/loz/8_rez_RP.pdf))

 

Przydatny też może być opis algorytmu ze skryptu (http://sem.eti3miasto.nazwa.pl/04/air_Sztuczna-Inteligencja/z%207%20semu/07_Sztuczna-Inteligencja_Wyklad.pdf) na stronie 49-51.

 

Pytanie, w internecie można wiele znaleźć poradników dot. obsługi Listy w Prologu. Pytanie jak listy mają się do łańcuchów znaków. Pytam dlatego, że same proste wywołanie prostej funkcji (np. ?- wypisz([p(x)a])( wypisującej element po elemencie zadaną listę) powoduję błąd przez to, że a występuje za nawiasem… 

Podaj jakiś przykład własnego kodu. Osobom przeglądającym temat będzie łatwiej pomóc, inaczej będę musiał uznać, że liczysz na gotowca i wywalić temat do kosza.

Nie liczę na gotowca to byłoby zbyt proste :slight_smile:

Głównie chciałbym o uzyskanie wskazówek jak traktować wytyczną o łańcuchach znaków i jak to się ma do listy w Prologu. Czy aby całe to zadanie w takim razie jest do wykonania na listach skoro podana przeze mnie formuła powoduje error.

 

Fakt, podając kroki algorytmu troszkę zabrzmiało jakbym liczył na gotowca. Za to przepraszam.

 

Tak jak pisałem o Prologu moje obycie jest bardzo małe, potrzebuje wskazówek na ww. problemy, tak by móc jakoś swobodnie wystartować. Samej literatury o Prologu i o ‘łańcuchach’ w listach nie znalazłem dlatego rozglądam się tutaj na forum :slight_smile: