Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:prolog:lab_prolog_ansic [2007/11/20 16:09] kosmo |
pl:prolog:lab_prolog_ansic [2007/11/27 16:18] kosmo |
| |
====== Wstęp ====== | |
| |
Prolog można łatwo zintegrować z językiem //ANSI C//. | |
| |
W [[http://www.swi-prolog.org/|SWI]] służy do tego podstawowy [[http://gollem.science.uva.nl/SWI-Prolog/Manual/foreign.html|interfejs do C]] | |
| |
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ą ''TRUE'' w przypadku powodzenia i ''FALSE'' 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. | |
| |
* Uruchamianie i zatrzymywanie SWI-Prologu: | |
Interpreter Prologu uruchamia funkcja ''[[http://gollem.science.uva.nl/SWI-Prolog/Manual/foreigninclude.html#PL_initialise()|int PL_initialise(int argc, char *argv[])]]'', a zatrzymuje ''[[http://gollem.science.uva.nl/SWI-Prolog/Manual/foreigninclude.html#PL_cleanup()|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ę ''[[http://gollem.science.uva.nl/SWI-Prolog/Manual/foreigninclude.html#PL_toplevel()|int PL_toplevel()]]'' umożliwającą uruchomienie standardowej konsoli kompilatora z poziomu programu w C. | |
| |
<code c> | |
#include <SWI-Prolog> | |
| |
int main(int argc, char *argv) { | |
int retval; | |
| |
retval = PL_initialise(argc, argv); | |
if (retval == FALSE) | |
return(1); | |
| |
retval = PL_toplevel(); | |
| |
PL_cleanup(retval); | |
return(retval); | |
} | |
</code> | |
| |
| |
| |
===== Etap 2: Ładowanie kodu Prologu i uruchamianie predykatów z poziomu C ===== | |
| |
<code c> | |
#include <SWI-Prolog> | |
| |
int main(int argc, char *argv) { | |
int retval; | |
| |
retval = PL_initialise(argc, argv); | |
if (retval == FALSE) | |
return(1); | |
| |
| |
retval = PL_toplevel(); | |
| |
PL_cleanup(retval); | |
return(retval); | |
} | |
</code> | |
| |
===== Etap 3: Predykaty w C ===== | |
| |
===== Prolog z C ===== | |
| |
===== Unix: polecenia systemowe ===== | |
[[http://www.swi-prolog.org/packages/clib.html|pakiet Clib]] | |
| |
===== Unix: sockety ===== | |
[[http://www.swi-prolog.org/packages/clib.html|pakiet Clib]] | |
| |
====== Źródła ====== | |
| |
* [[http://gollem.science.uva.nl/SWI-Prolog/Manual/Contents.html|Podręcznik SWI]] | |
* [[http://gollem.science.uva.nl/SWI-Prolog/Manual/foreign.html|interfejs do C]] | |
* [[http://www.swi-prolog.org/packages/clib.html|pakiet Clib]] | |
| |
inne | |
| |
przyklady | |
| |
narzedzia | |
| |