【问题标题】:PREDICATE( name, arity )谓词(名称,arity)
【发布时间】:2010-05-08 21:30:09
【问题描述】:

假设我有以下程序:

#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 的第一个和第二个参数?

干杯,

【问题讨论】:

    标签: visual-studio-2008 swi-prolog


    【解决方案1】:

    如果需要在类的私有成员上调用外部代码,那么这些类需要调用外部代码。为了保留符号名称,代码必须是“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);
            }
       }; 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      相关资源
      最近更新 更多