2013-01-17 22 views
5

我是prolog的新手,希望将所有查询保存在文件中而不是手动输入。如何在运行prolog脚本时制作prolog打印查询结果

我有这些事实在facts.pl

likes(wallace, cheese). 
likes(grommit, cheese). 
likes(wendolene, sheep). 

friend(X, Y) :- \+(X = Y), likes(X, Z), likes(Y, Z). 

阅读this question答案, 后,我想出了下面的代码queries.pl

main :- 
    write(likes(wallace, cheese)), 
    halt. 

:- initialization(['facts.pl']). 
:- initialization(main). 

在这里,我要检查,如果likes(wallace, cheese)持有, 我所期望的是输出类似yesno但实际输出是likes(wallace, cheese)

我GOOGLE了很多,并试图

X = likes(wallace, cheese), write(X).

X is likes(wallace, cheese), write(X).

X := likes(wallace, cheese), write(X).

但他们没有工作。

这对你来说可能是一个非常简单的问题,但我不知道如何把事情做好。

顺便说一句,我使用的GNU Prolog的1.4.1

回答

3

我认为你需要一种方法来“标签”每个查询:这里一个简单的方法

query(likes(wallace, cheese)). 
query(likes(mickey, whisky)). 

% service predicates, check the library and use that if available 
forall(X,Y) :- \+ (X, \+ Y). 
writeln(T) :- write(T), nl. 

main :- 
    forall(query(Q), (Q -> writeln(yes:Q) ; writeln(no:Q))), 
    halt.