Wstęp
Prolog można łatwo zintegrować z językiem ANSI C.
W SWI służy do tego podstawowy Foreign Language Interface
Preliminaria:
znajomość Prologu
znajomość ANSI C
Cel Lab
Ćwiczenia
Etap 1: Podstawy
Interpreter Prologu uruchamia funkcja int PL_initialise(int argc, char *argv[])
, a zatrzymuje void PL_cleanup(int status)
. Wszystkie wywołania Prologu (poza jednym wyjątkiem opisanym w dalszej części ćwiczenia) muszą zawierać się pomiędzy tymi funkcjami.
SWI-Prolog udostępnia funcję int PL_toplevel()
umożliwającą uruchomienie standardowej konsoli kompilatora z poziomu programu w C.
Należy napisać program w C, który uruchomi konsolę Prologu.
Etap 2: Ładowanie kodu Prologu i uruchamianie predykatów z poziomu C
Etap 3: Predykaty w C
Prolog umożliwa implementację predykatów w języku C. W przypadku SWI predykat jest funkcją zwracającą wartość TRUE
lub FALSE
, przyjmującą argumenty typu term_t
w liczbie równej arności danego predykatu. Przed użyciem argumenty muszą być skonwertowane do typów języka C za pomocą odpowiednich funkcji. Możliwa jest także ich modyfikacja oraz unifikacja.
Predykaty napisane w języku C przed użyciem muszą zostać zarejestrowane przy pomocy funkcji int PL_register_foreign(const char *name, int arity, foreign_t (*function)(), int flags)
przed inicjalizacją Prologu. Po tej czynności mogą być używane zarówno z poziomu języka C jak i Prologu.
Należy napisać w języku C predykat przyjmujący jako argument tekst, który zostanie wypisany na ekranie w ozdobych nawiasach (-=[ ]=-
), a następnie przetestować jego działanie przy pomocy konsoli Prologu.
Unix: Polecenia Systemowe
SWI-Prolog posiada mechanizmy pozwalajace na interację z systemem operacyjnym na którym pracuje. Do najprostrzych należy predykat shell/1, który pozwala na uruchomienie dowolnej aplikacji z poziomu Prologu.
Na głębszą interackcję pozwala biblioteka SWI-Prolog C-library.
Należy napisać w Prologu program uruchamiający jednocześnie 4 xtermy.
Unix: Sockety
SWI-Prolog C-library pozwala także na komunikację sieciową, udostępniająć sieciowe API systemu operacyjengo jako predykaty. W Dokumentacji podane są kompletne przykłady implementacji serwerów i klientów napisanych w Prologu.
* Zadanie:
Należy napisać w Prologu aplikację pobierającą poprzez protokół HTTP plik tekstowy i wyświetlający go na ekranie. Minimalne żądanie HTTP ma postać:
GET /ścieżka/do/pliku.txt<znak końca linii>
<znak końca linii>
Po wysłaniu żądania serwer wysyła nagłówki i zawartość pliku rozdzielone pustą linią a następnie zamyka połączenie.
Źródła