To jest stara wersja strony!


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

  • Uwagi na początek:
    • Praktycznie wszystkie funkcje interfejsu Prolog ↔ C SWI-Prologu zwracają wartość różną od 0 w przypadku powodzenia i zerową w przypadku błędu.
    • Nawet drobne błędy w użyciu API Prologu mogą zaowocować znaczącą destabilizacją całego programu bądź jego niewytłumaczalmnym działaniem.
    • Programy należy kompilować przy pomocy załączonego pliku Makefile. Należy go skopiować pod nazwą Makefile do katalogu, w którym będą zapisywane programy tworzone podczas tego ćwiczenia. Po wydaniu komendy make wszystkie pliki *.c zostaną skompilowane i skonsolidowane z Prologiem.
  • Uruchamianie i zatrzymywanie SWI-Prologu:

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.

  • Uruchamianie konsoli SWI-Prologu:

SWI-Prolog udostępnia funcję int PL_toplevel() umożliwającą uruchomienie standardowej konsoli kompilatora z poziomu programu w C.

  • Zadanie:

Należy napisać program w C, który uruchomi konsolę Prologu.

Etap 2: Ładowanie kodu Prologu i uruchamianie predykatów z poziomu C

Komunikacja pomiędzy Prologiem a C odbywa się wewnątrz ramek, które określa się za pomocą funkcji fid_t PL_open_foreign_frame() oraz void PL_close_foreign_frame(). Ramki umożliwają cofnięcie zmian w Prologu wprowadzonych przez kod w języku C. Można to zrobić za pomocą wywołań void PL_discard_foreign_frame(fid_t id) oraz void PL_rewind_foreign_frame(fid_t id).

Wewnątrz ramki można wywołać predykat Prologu. Najprościej użyć w tym celu funkcji int PL_call(term_t goal, module_t m). Uruchamiane wyrażenie możemy stworzyć za pomocą wywyołania int PL_chars_to_term(const char *chars, term_t -t), która skonwertuje string języka C na term języka Prolog. Aby konwersja była możliwa, należy wcześniej zallokować termy. Służy do tego między innymi funkcja term_t PL_new_term_ref().

  • Zadanie:

Należy napisać program, który za pomocą predykatu consult/1 wczyta program w Prologu, a następnie wykona predykat z załadowanego pliku.

Etap 3: Predykaty w C

Prolog z C

Unix: polecenia systemowe

Unix: sockety

Źródła

pl/prolog/lab_prolog_ansic.1196091684.txt.gz · ostatnio zmienione: 2019/06/27 15:59 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0