预测(名称,arity)

时间:2010-05-08 21:30:10

标签: visual-studio-2008 swi-prolog

假设我有以下程序:

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

当我编译它时,它链接Prolog和C ++,然后启动Prolog命令提示符。

我在myFile.pl中的所有内容都是

:- use_module( library(shlib) ).

当我在Prolog提示符下键入列表时,我得到了

Foreign: add/3

我的问题是如何在我的外语谓词添加中使用其他子例程的结果,比如一个类?假设我的程序中有一个类可以计算一些x和y。显然,x和y将是该类头文件的私有或受保护成员。如何在我的添加谓词中使用x和y?例如,如果我想返回x和y的总和以及add?

的第一和第二个参数

干杯,

1 个答案:

答案 0 :(得分:0)

如果需要在类的私有成员上调用外部代码,那么这些类需要调用外部代码。代码必须是“C”而不是“C ++”编译,以保留符号名称。

在这种情况下,具有私有x,y的类必须调用add(x,y)并获得结果。该类需要一种方法来告诉它调用外部add/3

 extern "C" int add(int x, int y);
 class Priv{
        int x,y;
      public:
        int privadd(void){
            return add(x,y);
        }
   };