2014-09-19 43 views
1

我想基於使用Prolog謂詞的C-File構建可執行文件。我想使用GNU Prolog。從C作爲獨立調用(GNU)Prolog的示例

我成功(基於GNU序言教程)建examp_c.c,examp.pl:

#include <string.h> 
#include <gprolog.h> 

PlBool 
my_call(PlTerm goal) 

{ 
    PlTerm *arg; 
    int functor, arity; 
    int result; 

    arg = Pl_Rd_Callable_Check(goal, &functor, &arity); 
    Pl_Query_Begin(PL_FALSE); 
    result = Pl_Query_Call(functor, arity, arg); 
    Pl_Query_End(PL_KEEP_FOR_PROLOG); 
    return (result == PL_SUCCESS); 
} 

編譯使用

gplc examp.pl examp_c.c 

當調用可執行examp Prolog的解釋是開始/模擬:

GNU Prolog 1.4.4 (64 bits) 
Compiled Aug 3 2013, 20:06:22 with gcc 
By Daniel Diaz 
Copyright (C) 1999-2013 Daniel Diaz 
| ?- 

但我想要的是有一個C程序內部cal而不通過Prolog解釋器與用戶進行交流。 Prolog謂詞應該作爲/在C程序中的參數提交,或者在內部生成。

你知道這個例子嗎?或者我誤解了某些東西,這不可能嗎?

你看,我剛剛開始作爲新手......我會很高興得到一些幫助:-)提前非常感謝。

回答

0

您也可以直接寫一個main()在C,然後inkove序言從C See Defining a new C main function in the manual.

+0

非常感謝你們倆,@Paulo了。有用! :-)最後一個問題:使用gnuprolog可以生成一個庫(作爲windows上的dll),而不僅僅是一個「exe」文件?或者只有基於SWI Prolog纔有可能? – kiw 2014-09-22 07:25:01

0

您可以在Prolog文件中使用initialization/1指令來定義在啓動時要執行的查詢。還有一個--no-top-level鏈接器選項用於禁止頂級解釋器。檢查兩者的GNU Prolog文檔。