Thread: PREDICATE( name, arity )

  1. #1
    Registered User
    Join Date
    Mar 2010
    Posts
    26

    PREDICATE( name, arity )

    Suppose I have the program below:
    Code:
        #include files
    
        PREDICATE( add, 3 )
        {
            return A3 = (long)A1 + (long)A2;
        }
    
        int main( int argc, char** argv )
        {
            PlEngine e( argv[0] );
            PlCall( "consult('myFile.pl')" );
            PL_halt( PL_toplevel() ? 0 : 1 );
        }
    When I compile it, it links Prolog and C++ and then launches the Prolog command prompt.

    All I have in myFile.pl is
    Code:
        :- use_module( library(shlib) ).
    When I type listing at the Prolog prompt, I get
    Code:
        Foreign: add/3
    So far, everything is simple and as expected. My question is how do I use the result of some other subroutine, say a class, in my foreign predicate add? Let's say I have a class somewhere in my program that calculates some x and y. Obviously x and y would be private or protected members of that class' header file. How do I use x and y in my add predicate? For instance, if I wanted to return the sum of x and y and first and second arguments of add?

    Cheers,

  2. #2
    Registered User ssharish2005's Avatar
    Join Date
    Sep 2005
    Location
    Cambridge, UK
    Posts
    1,732
    well the you can a member fucntion which your calls to get the private or the protected data member. There is no difference in that. You program what ever you want in C++ and then use your Prolog API and warp it up which then provides a neat way of interfacing it between the prolog and C/C++.

    I suppose you know how to get the results in prolog?

    Code:
    add( 10,20, R ).
    The R variable would hold the sum of 10 and 20 as Prolog wouldn't return the sum instead instead true/false.

    ssharish
    Life is like riding a bicycle. To keep your balance you must keep moving - Einstein

Popular pages Recent additions subscribe to a feed

Tags for this Thread