我有一个Prolog文件(Hanoi.pl),其中包含解决河内塔难题的代码:
hanoi( N ):-
move( N, left, middle, right ).
move( 0, _, _, _ ):-
!.
move( N, A, B, C ):-
M is N-1,
move( M, A, C, B ),
inform( A, B ),
move( M, C, B, A ).
inform( X, Y ):-
write( 'move a disk from ' ),
write( X ),
write( ' to ' ),
writeln( Y ).
我还有一个用VS2008 IDE编写的C ++文件:
#include <iostream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
#include "SWI-cpp.h"
#include "SWI-Prolog.h"
predicate_t phanoi;
term_t t0;
int main(int argc, char** argv)
{
long n = 5;
int rval;
if ( !PL_initialise(1, argv) )
PL_halt(1);
PL_put_integer( t0, n );
phanoi = PL_predicate( "hanoi", 1, NULL );
rval = PL_call_predicate( NULL, PL_Q_NORMAL, phanoi, t0 );
system( "PAUSE" );
}
如何从我的C ++代码中查阅我的Prolog源代码(Hanoi.pl)?不是从命令提示符 - 从代码,包括或咨询或编译?它与我的cpp文件位于同一文件夹中。
谢谢,
答案 0 :(得分:0)
我的Prolog源代码(hanoi.pl)
hanoi( N ):-
move( N, left, middle, right ).
move( 0, _, _, _ ):-
!.
move( N, A, B, C ):-
M is N-1,
move( M, A, C, B ),
inform( A, B ),
move( M, C, B, A ).
inform( X, Y ):-
write( 'move a disk from ' ),
write( X ),
write( ' to ' ),
writeln( Y ).
我的C ++代码(用VS2008 IDE编写)
#include <iostream>
#include <fstream>
#include <string>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdafx.h>
using namespace std;
#include "Windows.h"
#include "ctype.h"
#include "SWI-cpp.h"
#include "SWI-Prolog.h"
#include "SWI-Stream.h"
term_t t;
predicate_t p;
int main( int argc, char** argv )
{
argc = 4;
argv[0] = "libpl.dll";
argv[1] = "-G32m";
argv[2] = "-L32m";
argv[3] = "-T32m";
PL_initialise(argc, argv);
if ( !PL_initialise(argc, argv) )
PL_halt(1);
PlCall( "consult(swi('plwin.rc'))" );
PlCall( "consult('hanoi.pl')" );
int rval;
long n = 3;
PL_put_integer( t, n );
p = PL_predicate( "hanoi", 1, NULL );
rval = PL_call_predicate( NULL, PL_Q_NORMAL, p, t );
PL_halt( PL_toplevel() ? 0 : 1 );
}
只需在VS2008中按F5即可构建并编译并运行!