Просмотр исходного кода Пролога из файла решения VS2008

StackOverflow https://stackoverflow.com/questions/2409362

  •  18-09-2019
  •  | 
  •  

Вопрос

У меня есть файл Пролога (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 <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" );
}

Как я могу просмотреть исходный код Пролога (Hanoi.pl) из моего кода C++?Не из командной строки, а из кода, что-то вроде включения, консультации или компиляции?Он находится в той же папке, что и мой файл cpp.

Спасибо,

Это было полезно?

Решение

Исходный код моего Пролога (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 );
}

Просто нажмите F5 в VS2008, чтобы собрать, скомпилировать и запустить!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top