Prolog&Cpp&Java

background image

Łączenie Prologa z

Łączenie Prologa z

innymi językami

innymi językami

programowania

programowania

Sławomir Bazan

Sławomir Bazan

Marek Grabowski

Marek Grabowski

Adam Libura

Adam Libura

AiR – EAIiE

AiR – EAIiE

2004/2005

2004/2005

background image

Java i Prolog

Java i Prolog

Java

Java

język wieloplatformowy, przenośny

język wieloplatformowy, przenośny

w całości zorientowany obiektowo

w całości zorientowany obiektowo

stworzony dla potrzeb aplikacji internetowych

stworzony dla potrzeb aplikacji internetowych

Prolog

Prolog

używany do tworzenia inteligentnych

używany do tworzenia inteligentnych

komponentów, w których wiedza wyrażana jest w

komponentów, w których wiedza wyrażana jest w

kategoriach logiki, czyli zbliżonych do ludzkiego

kategoriach logiki, czyli zbliżonych do ludzkiego

rozumowania

rozumowania

background image

Java i Prolog

Java i Prolog

Połączenie Prologa z Javą pozwala na wykorzystanie najmocniejszych

Połączenie Prologa z Javą pozwala na wykorzystanie najmocniejszych

stron obu języków. Umożliwia tworzenie rozbudowanych systemów

stron obu języków. Umożliwia tworzenie rozbudowanych systemów

doradczych z interfejsem graficznym, w znaczący sposób

doradczych z interfejsem graficznym, w znaczący sposób

ułatwiając obsługę takich systemów, a także wykorzystanie

ułatwiając obsługę takich systemów, a także wykorzystanie

możliwości Internetu.

możliwości Internetu.

Możliwości

Możliwości

tworzenie aplikacji w Javie z fragmentami kodu w Prologu, polega

tworzenie aplikacji w Javie z fragmentami kodu w Prologu, polega

to na zastosowaniu odpowiedniej biblioteki i połączeniu

to na zastosowaniu odpowiedniej biblioteki i połączeniu

poszczególnych części programu w czasie kompilacji

poszczególnych części programu w czasie kompilacji

wykorzystanie dynamicznie dołączonej biblioteki dll

wykorzystanie dynamicznie dołączonej biblioteki dll

często używane rozwiązanie polegające na zastosowaniu serwera,

często używane rozwiązanie polegające na zastosowaniu serwera,

dostarczającego usług związanych z programem w Prologu

dostarczającego usług związanych z programem w Prologu

(przykładem jest Amzi Prolog Logic Server)

(przykładem jest Amzi Prolog Logic Server)

background image

InterProlog

InterProlog

Dostępny dla systemów

Dostępny dla systemów

Windows

Windows

Linux

Linux

Mac OS X

Mac OS X

Wspiera

Wspiera

SWI Prolog

SWI Prolog

XSB Prolog

XSB Prolog

Dystrybuowany na licencji GNU

Dystrybuowany na licencji GNU

Możliwości

Możliwości

wywołanie dowolnego celu Prologa poprzez obiekt

wywołanie dowolnego celu Prologa poprzez obiekt

PrologEngine

PrologEngine

wywołanie dowolnej metody przy użyciu predykatu

wywołanie dowolnej metody przy użyciu predykatu

javaMessage

javaMessage

wzajemna rekurencja

wzajemna rekurencja

wspiera wielowątkowość Javy

wspiera wielowątkowość Javy

background image

InterProlog

InterProlog

Programowanie od strony Prologa

Programowanie od strony Prologa

Dostarczone predykaty pozwalają wywołać dowolną metodę lub

Dostarczone predykaty pozwalają wywołać dowolną metodę lub

konstruktor Java. Najważniejsze z nich to:

konstruktor Java. Najważniejsze z nich to:

ipPrologEngine(E)

ipPrologEngine(E)

- zwraca referencję do obiektu

- zwraca referencję do obiektu

PrologEngine

PrologEngine

, który

, który

uruchomił ten proces Prologa

uruchomił ten proces Prologa

javaMessage(Target, Result, Exception, Message, ArgList,

javaMessage(Target, Result, Exception, Message, ArgList,

NewArgList)

NewArgList)

- synchronicznie wysyła wiadomość Message do obiektu

- synchronicznie wysyła wiadomość Message do obiektu

Target, czekając na rezultat Result, przechwytując ewentualne wyjątki

Target, czekając na rezultat Result, przechwytując ewentualne wyjątki

Exception. Przesyłane są argumenty ArgList, do NewArgList

Exception. Przesyłane są argumenty ArgList, do NewArgList

zapisywane są ewentualnie zmienione argumenty

zapisywane są ewentualnie zmienione argumenty

javaMessage(Target, Result, Message)

javaMessage(Target, Result, Message)

- działa tak samo jak pełna

- działa tak samo jak pełna

instrukcja, z tym, że wiadomość ma format nazwaMetody(argumenty),

instrukcja, z tym, że wiadomość ma format nazwaMetody(argumenty),

jeżeli nastąpi jakiś wyjątek to przesłany on zostanie do wyjściowego

jeżeli nastąpi jakiś wyjątek to przesłany on zostanie do wyjściowego

strumienia Prologa, natomiast metoda nie wykona się

strumienia Prologa, natomiast metoda nie wykona się

background image

InterProlog

InterProlog

Przykład użycia predykatu

Przykład użycia predykatu

javaMessage('javax.swing.JFrame',W,'JFrame'(string(myTitle))), 

javaMessage('javax.swing.JFrame',W,'JFrame'(string(myTitle))), 

javaMessage(W,C,getContentPane), 

javaMessage(W,C,getContentPane), 

javaMessage('javax.swing.JLabel',L,

javaMessage('javax.swing.JLabel',L,

'JLabel'(string('Hello Prolog, greetings from Swing:-)'))),

'JLabel'(string('Hello Prolog, greetings from Swing:-)'))),

javaMessage(C,add(string('Center'),L)),

javaMessage(C,add(string('Center'),L)),

javaMessage(W,pack),javaMessage(W,show).

javaMessage(W,pack),javaMessage(W,show).

Powyższy kod spowoduje pojawienie się okna:

Powyższy kod spowoduje pojawienie się okna:

background image

InterProlog

InterProlog

Wizualizacja danych Prologa

Wizualizacja danych Prologa

browseTerm(Term)

browseTerm(Term)

- predykat powoduje utworzenie okna

- predykat powoduje utworzenie okna

pozwalającego przeglądać Term

pozwalającego przeglądać Term

Przykład użycia

Przykład użycia

browseTerm(callAnotherProlog(SWI, findall(op(P,T,Name),

browseTerm(callAnotherProlog(SWI, findall(op(P,T,Name),

current_op(P,T,Name), SWIops)))

current_op(P,T,Name), SWIops)))

background image

InterProlog

InterProlog

Programowanie od strony Javy

Programowanie od strony Javy

InterProlog składa się z czterech pakietów

InterProlog składa się z czterech pakietów

com.declarativa.interprolog

com.declarativa.interprolog

podstawowy pakiet

podstawowy pakiet

com.declarativa.interprolog.gui

com.declarativa.interprolog.gui

wizualizacja

wizualizacja

com.declarativa.interprolog.util

com.declarativa.interprolog.util

dodatowe narzędzia

dodatowe narzędzia

com.xsb.interprolog

com.xsb.interprolog

dla XSB Prolog

dla XSB Prolog

Najważniejszą klasą jest

Najważniejszą klasą jest

PrologEngine

PrologEngine

z pakietu

z pakietu

com.declarativa.interprolog

com.declarativa.interprolog

background image

InterProlog

InterProlog

Klasa

Klasa

PrologEngine

PrologEngine

zawiera szereg metod, z których najważniejsza:

zawiera szereg metod, z których najważniejsza:

public Object[] deterministicGoal (String G, String OVar, Object[]

public Object[] deterministicGoal (String G, String OVar, Object[]

objectsP, String RVars)

objectsP, String RVars)

- wysyła synchronicznie zapytanie do Prologa,

- wysyła synchronicznie zapytanie do Prologa,

tylko pierwsze rozwiązanie jest rozważane

tylko pierwsze rozwiązanie jest rozważane

Parametry:

Parametry:

G - term celu Prologa

G - term celu Prologa

OVar

OVar

- zmienna Prologa, która będzie przypisana do tablicy obiektów

- zmienna Prologa, która będzie przypisana do tablicy obiektów

objectsP

objectsP

objectsP - tablica obiektów w Javie, która ma być przekazana do Prologa

objectsP - tablica obiektów w Javie, która ma być przekazana do Prologa

RVars - lista Prologa ze specyfikacją obiektów, zwykle zawiera zmienne

RVars - lista Prologa ze specyfikacją obiektów, zwykle zawiera zmienne

występujące w G

występujące w G

Zwraca:

Zwraca:

nową tablicę, zawierającą obiekt dla każdego termu z listy RVars lub NULL

nową tablicę, zawierającą obiekt dla każdego termu z listy RVars lub NULL

jeśli wywołanie się nie powiedzie

jeśli wywołanie się nie powiedzie

Instrukcja posiada też kilka uproszczonych wersji, w których nie występuja

Instrukcja posiada też kilka uproszczonych wersji, w których nie występuja

wszystkie powyższe parametry.

wszystkie powyższe parametry.

background image

InterProlog

InterProlog

Przydatne adresy:

Przydatne adresy:

http://

http://

www

www

.

.

declarativa

declarativa

.

.

com

com

/

/

InterProlog

InterProlog

/

/

http://www.cs.ucy.ac.cy/compulog/dec98update/projects/interprolo

http://www.cs.ucy.ac.cy/compulog/dec98update/projects/interprolo

g.htm

g.htm

background image

JPL

JPL

JPL - dwukierunkowy interfejs Java/Prolog

JPL - dwukierunkowy interfejs Java/Prolog

Własności

Własności

działa w oparciu o SWI Prolog oraz interfejs jni dla Javy

działa w oparciu o SWI Prolog oraz interfejs jni dla Javy

pozwala dodawać kod Prologa do programu w Javie

pozwala dodawać kod Prologa do programu w Javie

pozwala dodawać kod Javy do programu w Prologu

pozwala dodawać kod Javy do programu w Prologu

wykorzystuje dynamiczną bibliotekę dll

wykorzystuje dynamiczną bibliotekę dll

projekt dystrybuowany na licencji GNU

projekt dystrybuowany na licencji GNU

Możliwości

Możliwości

korzystanie ze wszystkich klas i metod Javy

korzystanie ze wszystkich klas i metod Javy

użycie wszystkich standardowych bibliotek i predykatów Prologa

użycie wszystkich standardowych bibliotek i predykatów Prologa

tworzenie hybrydowych aplikacji (Java+Prolog)

tworzenie hybrydowych aplikacji (Java+Prolog)

background image

JPL

JPL

Programowanie od strony Prologa

Programowanie od strony Prologa

jpl_new(Class, Params, Ref)

jpl_new(Class, Params, Ref)

-tworzenie instancji klasy Class Javy z

-tworzenie instancji klasy Class Javy z

parametrami Javy, zwracana jest referencja Ref

parametrami Javy, zwracana jest referencja Ref

jpl_call(Ref, Method, Params, Result)

jpl_call(Ref, Method, Params, Result)

- wywołanie metody

- wywołanie metody

należącej do wcześniej utworzonej instancji klasy

należącej do wcześniej utworzonej instancji klasy

background image

JPL

JPL

Programowanie od strony Javy

Programowanie od strony Javy

Przykład użycia, kod w Prologu, zapisany w pliku test.pl

Przykład użycia, kod w Prologu, zapisany w pliku test.pl

child_of(joe, ralf).

child_of(joe, ralf).

child_of(mary, joe).

child_of(mary, joe).

child_of(steve, joe).

child_of(steve, joe).

descendent_of(X, Y) :- child_of(X, Y).

descendent_of(X, Y) :- child_of(X, Y).

descendent_of(X, Y) :- child_of(Z, Y), descendent_of(X, Z).

descendent_of(X, Y) :- child_of(Z, Y), descendent_of(X, Z).

Kod w Javie

Kod w Javie

Query q1 = new Query("consult",

Query q1 = new Query("consult",

new Term[] {new Atom("test.pl")});

new Term[] {new Atom("test.pl")});

background image

JPL

JPL

Sprawdzenie powodzenia akcji za pomocą metody

Sprawdzenie powodzenia akcji za pomocą metody

query

query

System.out.println( "consult " + (q1.query() ?

System.out.println( "consult " + (q1.query() ?

"succeeded" : "failed"));

"succeeded" : "failed"));

Przesłanie zapytania do bazy danych:

Przesłanie zapytania do bazy danych:

Query q2 = new Query(

Query q2 = new Query(

"child_of", new Term[] {new Atom("joe"),new Atom("ralf")});

"child_of", new Term[] {new Atom("joe"),new Atom("ralf")});

System.out.println("child_of(joe,ralf) is " +

System.out.println("child_of(joe,ralf) is " +

( q2.query() ? "provable" : "not provable" ));

( q2.query() ? "provable" : "not provable" ));

background image

JPL

JPL

Zapytanie z użyciem zmiennych

Zapytanie z użyciem zmiennych

Variable X = new Variable();

Variable X = new Variable();

Query q4 = new Query(

Query q4 = new Query(

        "descendent_of", new Term[] {X,new Atom("ralf")});

        "descendent_of", new Term[] {X,new Atom("ralf")});

java.util.Hashtable solution;

java.util.Hashtable solution;

solution = q4.oneSolution();

solution = q4.oneSolution();

System.out.println(

System.out.println(

"first solution of descendent_of(X, ralf)");

"first solution of descendent_of(X, ralf)");

System.out.println( "X = " + solution.get(X));

System.out.println( "X = " + solution.get(X));

Znalezienie wszystkich rozwiązań

Znalezienie wszystkich rozwiązań

java.util.Hashtable[] solutions = q4.allSolutions();

java.util.Hashtable[] solutions = q4.allSolutions();

for ( int i=0 ; i<solutions.length ; i++ ) {

for ( int i=0 ; i<solutions.length ; i++ ) {

    System.out.println( "X = " + solutions[i].get(X));

    System.out.println( "X = " + solutions[i].get(X));

}

}

background image

JPL

JPL

Przydatne adresy:

Przydatne adresy:

http://

http://

www

www

.

.

swi

swi

-prolog.

-prolog.

org

org

/

/

packages

packages

/

/

jpl

jpl

/

/

java

java

_

_

api

api

/

/

index

index

.

.

html

html

background image

Java i Prolog

Java i Prolog

Inne interfejsy

Inne interfejsy

Amzi

Amzi

B-Prolog

B-Prolog

BinProlog

BinProlog

BirdLand

BirdLand

CiaoProlog

CiaoProlog

DGKS Prolog

DGKS Prolog

Jasper

Jasper

JavaLog

JavaLog

Translatory Prologa do Javy

Translatory Prologa do Javy

LLPj

LLPj

Prolog Cafe

Prolog Cafe

JIPL

JIPL

JIProlog

JIProlog

jProlog

jProlog

Kiev

Kiev

MINERVA

MINERVA

Prolog IV

Prolog IV

Trinc-Prolog

Trinc-Prolog

yajxb

yajxb

Interpretery

Interpretery

JINNI

JINNI

LL

LL

W-Prolog

W-Prolog

background image

Java i Prolog

Java i Prolog

Przydatne adresy:

Przydatne adresy:

http://

http://

www

www

.

.

declarativa

declarativa

.

.

com

com

/

/

interprolog

interprolog

/

/

systems

systems

.

.

htm

htm

background image

Amzi Prolog Logic Server LSAPI

Amzi Prolog Logic Server LSAPI

Środowisko Amzi Prolog Logic Server dostarcza usługi związane z

Środowisko Amzi Prolog Logic Server dostarcza usługi związane z

korzystaniem z plików napisanych w Prologu w oparciu o

korzystaniem z plików napisanych w Prologu w oparciu o

mechanizm klient-serwer. Program uruchamia serwer Prologa, a

mechanizm klient-serwer. Program uruchamia serwer Prologa, a

następnie zadaje mu zapytania. LSAPI umożliwia budować termy,

następnie zadaje mu zapytania. LSAPI umożliwia budować termy,

konwertować stringi do/z termów, przekazywać termy z/do

konwertować stringi do/z termów, przekazywać termy z/do

Prologa.

Prologa.

Biblioteka LSAPI znajduje się w pliku ‘logicServer.h’

Biblioteka LSAPI znajduje się w pliku ‘logicServer.h’

Połączenie z serwerem w C++ zapewnia klasa LogicServer, w

Połączenie z serwerem w C++ zapewnia klasa LogicServer, w

przypadku C jest to zestaw funkcji (nazwy zaczynają się od ls)

przypadku C jest to zestaw funkcji (nazwy zaczynają się od ls)

Najprostszy program w C++ będący jedynie hostem dla programu

Najprostszy program w C++ będący jedynie hostem dla programu

Prologa wywołuje następujące funkcje klasy:

Prologa wywołuje następujące funkcje klasy:

Init

Init

() – ładuje do pamięci silnik serwera

() – ładuje do pamięci silnik serwera

Load

Load

(logic_base_name) – wczytuje skompilowany program Prologa

(logic_base_name) – wczytuje skompilowany program Prologa

(logic_base_name.xpl)

(logic_base_name.xpl)

Main

Main

() – uruchamia główny predykat ‘main’ programu

() – uruchamia główny predykat ‘main’ programu

Close

Close

() – usuwa z pamięci silnik serwera

() – usuwa z pamięci silnik serwera

background image

Amzi Prolog Logic Server LSAPI

Amzi Prolog Logic Server LSAPI

Najprostsza metoda zadawania pytań do Prologa i odczytywania

Najprostsza metoda zadawania pytań do Prologa i odczytywania

odpowiedzi odbywa się za pomocą stringów poprzez funkcje:

odpowiedzi odbywa się za pomocą stringów poprzez funkcje:

term

term

CallStr

CallStr

(query_string) – konwertuje query_string do postaci termu i go

(query_string) – konwertuje query_string do postaci termu i go

wywołuje, jeśli zapytanie poprawne zwraca term, w p.p. 0

wywołuje, jeśli zapytanie poprawne zwraca term, w p.p. 0

term

term

ExecStr

ExecStr

(query_string) – to samo, ale bez obsługi nawrotów

(query_string) – to samo, ale bez obsługi nawrotów

string

string

TermToStr

TermToStr

(term) – konwertuje do stringu otrzymaną odpowiedź na

(term) – konwertuje do stringu otrzymaną odpowiedź na

podany term

podany term

tf

tf

Redo

Redo

() – wykonuje nawrót w celu pobrania kolejnych rozwiązań, gdy

() – wykonuje nawrót w celu pobrania kolejnych rozwiązań, gdy

istnieje zwraca true, w p.p. false

istnieje zwraca true, w p.p. false

Przykład:

Przykład:

Plik Prologu: XGENE.PRO

Plik Prologu: XGENE.PRO

mother(elaine,mary).

mother(elaine,mary).

mother(elaine,kathy).

mother(elaine,kathy).

mother(elaine,ricky).

mother(elaine,ricky).

mother(elaine,jenny).

mother(elaine,jenny).

sibling(X,Y) :- mother(P,X), mother(P,Y), X<>Y.

sibling(X,Y) :- mother(P,X), mother(P,Y), X<>Y.

background image

Amzi Prolog Logic Server LSAPI

Amzi Prolog Logic Server LSAPI

Fragment kodu w C++:

Fragment kodu w C++:

TF tf;

TF tf;

TERM t;

TERM t;

char s[80];

char s[80];

...

...

ls.Init();

ls.Init();

ls.Load("xgene");

ls.Load("xgene");

t = ls.CallStr("sibling(mary, X)");

t = ls.CallStr("sibling(mary, X)");

if (t == FALSE) tf = FALSE;

if (t == FALSE) tf = FALSE;

else tf = TRUE;

else tf = TRUE;

while (tf == TRUE) {

while (tf == TRUE) {

printf("%s\n", ls.TermToStr(t));

printf("%s\n", ls.TermToStr(t));

tf = ls.Redo();

tf = ls.Redo();

}

}

ls.Close();

ls.Close();

...

...

Wynik działania programu:

Wynik działania programu:

sibling(mary, kathy)

sibling(mary, kathy)

sibling(mary, ricky)

sibling(mary, ricky)

sibling(mary, jenny)

sibling(mary, jenny)

background image

Amzi Prolog Logic Server LSAPI

Amzi Prolog Logic Server LSAPI

Wywoływanie funkcji języka obcego z Prologa

Wywoływanie funkcji języka obcego z Prologa

Warunki dla tworzonych funkcji:

Warunki dla tworzonych funkcji:

Musi zwracać true lub false

Musi zwracać true lub false

Zawodzi przy nawrocie

Zawodzi przy nawrocie

Argumenty predykatów przekazywane są poprzez zestaw funkcji

Argumenty predykatów przekazywane są poprzez zestaw funkcji

bibliotecznych LSAPI

bibliotecznych LSAPI

W celu zarejestrowania funkcji jako predykat używa się polecenia:

W celu zarejestrowania funkcji jako predykat używa się polecenia:

lsAddPred(char *name

, ARITY arg, VOIDptr ptr);

, ARITY arg, VOIDptr ptr);

gdzie:

gdzie:

name – nazwa rejestrowanego

name – nazwa rejestrowanego

predykatu

predykatu

arg - liczba argumentów

arg - liczba argumentów

rejestrowanej funkcji

rejestrowanej funkcji

ptr – wskaźnik do

ptr – wskaźnik do

rejestrowanej funkcji

rejestrowanej funkcji

Przykład:

Przykład:

TF p_writeln(void)
{
int val;
lsGetParm(1, pINT, &val);
printf("%d", val);
return TRUE;
}
lsAddPred("writeln", 1, p_writeln);

background image

Przydatne adresy:

Przydatne adresy:

http://www.amzi.com/manuals/amzi7/ls/lsprguid.htm

http://www.amzi.com/manuals/amzi7/ls/lsprguid.htm

background image

Trinc-Prolog DLL

Trinc-Prolog DLL

Środowisko Trinc-Prolog pozwala na łączenie

Środowisko Trinc-Prolog pozwala na łączenie

Prologa z innymi językami programowania

Prologa z innymi językami programowania

za pomocą biblioteki tp_32.dll.

za pomocą biblioteki tp_32.dll.

Możliwe połączenia Trinc-Prologa:

Możliwe połączenia Trinc-Prologa:

> C

> C

> Delphi

> Delphi

> C++

> C++

> Visual Basic

> Visual Basic

> Borland C++ Builder

> Borland C++ Builder

> Java

> Java

background image

Trinc-Prolog DLL

Trinc-Prolog DLL

Dla

Dla

ś

ś

rodowiska Borland C++ Builder jest

rodowiska Borland C++ Builder jest

przeznaczona specjalna klasa

przeznaczona specjalna klasa

TprologEngine

TprologEngine

,

,

która zapewnia

która zapewnia

ł

ł

atw

atw

ą

ą

obs

obs

ł

ł

ug

ug

ę

ę

tp_32.dll. Deklaracja

tp_32.dll. Deklaracja

tej klasy zawarta jest w pliku

tej klasy zawarta jest w pliku

tcomp.h.

tcomp.h.

Funkcje klasy

Funkcje klasy

:

:

TPrologEngine( TComponent* Owner ) – konstruktor klasy

TPrologEngine( TComponent* Owner ) – konstruktor klasy

virtual ~TPrologEngine( void )

virtual ~TPrologEngine( void )

– destruktor

– destruktor

static int Version( void )

static int Version( void )

– wersja interfejsu

– wersja interfejsu

int Prove( char *Goal )

int Prove( char *Goal )

– wykonanie predykatu

– wykonanie predykatu

int Continue( void )

int Continue( void )

– znajduje kolejne

– znajduje kolejne

rozw

rozw

.

.

int NumVars( void )

int NumVars( void )

– liczba zm

– liczba zm

.

.

o

o

st

st

.

.

zapytania

zapytania

const char *VarName( int Index )

const char *VarName( int Index )

– nazwa zmiennej

– nazwa zmiennej

const char *VarValue( int Index )

const char *VarValue( int Index )

– warto

– warto

ść

ść

zmiennej

zmiennej

int VarType( int Index )

int VarType( int Index )

– typ zmiennej

– typ zmiennej

background image

Trinc-Prolog DLL

Trinc-Prolog DLL

Przykład:

Przykład:

suma(1,1).

suma(1,1).

suma(N,X) :-

suma(N,X) :-

N > 1,

N > 1,

N1 is N – 1,

N1 is N – 1,

suma(N1,X1),

suma(N1,X1),

X is X1 + N.

X is X1 + N.

background image

Trinc-Prolog DLL

Trinc-Prolog DLL

Fragment kodu Borland Builder C++:

Fragment kodu Borland Builder C++:

TPrologEngine *_Engine1;

TPrologEngine *_Engine1;

_Engine1 = new TPrologEngine(this);

_Engine1 = new TPrologEngine(this);

 

 

int result = _Engine1->Prove(“suma(5,N).”);

int result = _Engine1->Prove(“suma(5,N).”);

int NumVar = _Engine1->NumVars();

int NumVar = _Engine1->NumVars();

 

 

if ( result == TP_SOLUTION ) {

if ( result == TP_SOLUTION ) {

for( int i=0; i<NumVar; i++ ) {

for( int i=0; i<NumVar; i++ ) {

Str = AnsiString( Engine->VarName(i) );

Str = AnsiString( Engine->VarName(i) );

Str += AnsiString(" = ");

Str += AnsiString(" = ");

Str += AnsiString( Engine->VarValue(i));

Str += AnsiString( Engine->VarValue(i));

Str += AnsiString(", ");

Str += AnsiString(", ");

Text += Str;

Text += Str;

}

}

}

}

Application->MessageBox(Text.c_str(), “Wynik”, MB_OK);

Application->MessageBox(Text.c_str(), “Wynik”, MB_OK);

background image

Link

Link

http://www.trinc-prolog.com/doc/pl_dll.htm

http://www.trinc-prolog.com/doc/pl_dll.htm


Document Outline


Wyszukiwarka

Podobne podstrony:
wyklad5.cpp, JAVA jest językiem programowania obiektowego
01 Geometry CPP Java
03 Konstruktory CPP Java
05 Przykrywanie skladowych CPP Java
cpp 2
Java Media FreamWork
java 2
cpp z ccfd, pocpp lab7
Projekt java
JAVA tablice
Inzynieria oprogramowania w ujeciu obiektowym UML wzorce projektowe i Java iowuje
dane w pigulce 2 cpp
Java Przewodnik dla poczatkujacych Wydanie V javpp5
zasady grupy, java, javascript, oprogramowanie biurowe, programowanie, programowanie 2, UTK, systemy
prolog
praktyczny kurs java NX2M5DXARLEHY6NHXOS5FJHKLI6ACRLQQSDRS2Q
notatki java 08

więcej podobnych podstron