从 VS2008 解决方案文件中查阅 Prolog 源代码

发布于 2024-08-24 01:08:53 字数 1012 浏览 7 评论 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 ).

我还有一个用 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 文件位于同一文件夹中。

谢谢,

I have a Prolog file (Hanoi.pl) containing the code for solving the Hanoi Towers puzzle:

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 ).

I also have a C++ file written in VS2008 IDE:

#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" );
}

How can I consult my Prolog source code (Hanoi.pl) from within my C++ code? Not from the Command Prompt - from the code, something like include or consult or compile? It is located in the same folder as my cpp file.

Thanks,

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

宛菡 2024-08-31 01:08:53

我的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即可构建、编译和运行!

My Prolog Source Code (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 ). 

My C++ Code (written in 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 );
}

Just press F5 in VS2008 to build and compile and run!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文