SWI Prolog插件上的升华生成错误

SWI Prolog插件上的升华生成错误,prolog,swi-prolog,sublimetext3,Prolog,Swi Prolog,Sublimetext3,我知道这是一个愚蠢的问题,但我现在真的很绝望,因为我找不到建造它的方法。我总是犯这个错误 ERROR: call/2: Undefined procedure: main/1 ERROR: However, there are definitions for: ERROR: main/0 即使我试过 father(ahmad,samer). father(ahmad,lolo). father(ahmad,koko). grandfather(X,Y):- fa

我知道这是一个愚蠢的问题,但我现在真的很绝望,因为我找不到建造它的方法。我总是犯这个错误

ERROR: call/2: Undefined procedure: main/1
ERROR:   However, there are definitions for:
ERROR:         main/0
即使我试过

father(ahmad,samer).
father(ahmad,lolo).
father(ahmad,koko).


grandfather(X,Y):-
    father(U,X),
    father(Y,U).

main :- father(ahmad, X), writef('%t\n', [X]).

有人能帮我用正确的方法做吗?

对我来说很好

只需键入
main。
不要忘记
,否则它将无法运行。 这是我得到的

2 ?- main.
samer
true ;
lolo
true ;
koko
true.
true
之后键入
而不是按Enter按钮。如果按Enter键,则仅显示第一个名称

从你的代码中,我发现
ahmad
是父亲,所以关于
祖父
查询,我想我必须这样:

granfather(X,Y):- father(X,U),father(U,Y).

因为在您的
父亲
查询中,
父亲
位于左侧

您如何调用main?这就是问题所在……谢谢,它成功了,但是我必须这样写吗?
main:-father(ahmad,X),writef(“%t\n”,“[X])。
我的意思是,必须有一种方法来处理它,就像在eclipse PDT中一样,换句话说,我可以在哪里写查询?你说“哪里可以写查询”是什么意思?您的意思是在哪里(在什么程序中)可以编写代码?还有另一种编写代码的方法,无需编写
main
。只需编写父查询和祖父查询,然后运行程序并键入
father(ahmad,X)。
您将得到相同的结果。@Ambiguustk我不知道有什么高级插件可以促进与SWI顶层的正常交互。当我使用Sublime时,只要在终端中运行swipl,并在需要测试某个东西或提出查询时重新加载该文件。这对我很管用。然而,我必须承认,自从我切换到emacs后,我喜欢prolog模式提供的额外装饰。@NickLee我的意思是,如果可以在sublime中查询,不管终端中的swi prolog或eclipse的PDT插件如何。