6

我是 prolog 的新手,想将所有查询保存在一个文件中,而不是手动输入它们。

我有这些事实facts.pl

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

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

在阅读了这个问题的答案后,我想出了以下代码queries.pl

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

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

在这里,我想检查是否likes(wallace, cheese)成立,我期望输出类似yesorno但实际输出是likes(wallace, cheese)

我用谷歌搜索了很多并尝试过

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

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

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

但它们都不起作用。

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

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

4

1 回答 1

5

我认为您需要一种“标记”每个查询的方法:这里有一个简单的方法

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.
于 2013-01-17T17:57:36.013 回答