Słyszałem, że programowanie logiki może służyć jako alternatywa ogólnego przeznaczenia dla innych paradygmatów programowania, takich jak programowanie OO lub programowanie funkcjonalne. (Ponieważ Prolog jest kompletny w Turinga, musi tak być!)
Mam jednak problem z widzeniem, jak zaimplementować program interaktywny, taki jak prosta, graficzna gra konsolowa w Prologu lub w podobnym języku. Masz fakty, zasady, które mogą wyprowadzić więcej faktów, i zapytania, które je wyszukują. Łatwo jest zobaczyć, jak można użyć tych podstawowych elementów do stworzenia czegoś takiego jak solver sudoku. Ale co powiesz na Pac-mana lub prościej na Ponga?
UWAGA: Nie szukam szczegółów niskiego poziomu, ale przegląd koncepcyjny. (Na przykład: w kategoriach wysokiego poziomu, jak poradziłbyś sobie z wejściami / wyjściami? Jak zapisałbyś stan gry? Jak wdrożyłbyś coś w rodzaju „głównej pętli”? Jak zmierzyłbyś i zareagował na upływ czasu? )
źródło
Odpowiedzi:
Śledzenie stanu gry nie różni się od stanu śledzenia w żadnym innym programie Prolog. Definiujesz fakty, a następnie wykorzystujesz je do podejmowania decyzji. Jest dość stary, ale artykuł Exploring Prolog: Adventures, Objects, Animals, and Taxes dobrze wyjaśnia, jak to może działać w grze. Podsumowane z artykułu:
Poza tym potrzebujesz grafiki i biblioteki IO. Mogą istnieć komercyjne dystrybucje Prolog, które je zawierają. Najbardziej znam SWI Prolog , więc proponuję plOpenGL jako punkt wyjścia. Nie tylko daje ci dostęp do możliwości renderowania OpenGL, ale także zawiera powiązania dla zdarzeń myszy i klawiatury. Na przykład, aby obsłużyć naciśnięcie klawisza Escape, zdefiniuj regułę klawiatury w następujący sposób:
Spójrz na przykład ruchomego światła plOpenGL, aby uzyskać więcej szczegółów i przykład obsługi ruchu myszy.
Jeśli korzystasz z biblioteki graficznej, prawdopodobnie obsłuży ona pętlę gry. Zasadniczo odwracasz kontrolę nad biblioteką i udostępniasz reguły, które należy wykonać w odpowiednich przypadkach: konfigurowanie, odświeżanie, zdarzenia we / wy itp. Jeśli chcesz ograniczyć liczbę klatek na sekundę lub uruchomić kod warunkowo na podstawie czasu, możesz śledzić upływ czasu za pomocą godziny / daty dokonuje predykcji i odpowiednio podejmuje decyzje.
Istnieje wiele smaków Prologa, więc z pewnością nie jest to jedyny sposób na zbudowanie gry. Różne dystrybucje i powiązane języki będą używać różnych bibliotek / powiązań, które mogą zachęcać do różnych podejść. Ponadto programiści oprogramowania Polyglot mogą zachęcać do korzystania z bardziej „przyjaznego graficznie” języka hosta / środowiska wykonawczego do zarządzania renderowaniem i operacjami we / wy podczas korzystania z programu Prolog do modelowania zachowań podmiotów i podejmowania decyzji.
źródło
write
Wydaje mi się, że uwzględnienie operacji z efektami ubocznymi (jak ) w „logicznym predykacie” wydaje się zagiąć tę koncepcję dość daleko.Oprócz odpowiedzi Corbina : w stanie ogólnym można przechowywać / odzyskiwać w Prologu za pomocą predykatów assert / retract. Istnieje jednak wiele niestandardowych opcji, takich jak zapis do RDF, XML, relacyjnych baz danych itp. Jeśli chcesz mieć GUI, jednym z przykładów jest XPCE oferowany przez SWI-Prolog.
Należy zauważyć, że chociaż wdrożenie pełnej gry w programowaniu logicznym jest dobrym ćwiczeniem, w praktyce jej wydajność byłaby nieodpowiednia i dlatego dostawcy tacy jak SWI-Prolog oferują powiązania z językami niższego poziomu (np. Java, C ++ itp.). Nawet wdrożenie prostego rozwiązania Sudoku wymaga użycia bibliotek CLP .
źródło