prolog - 运行prolog脚本时如何使prolog打印查询结果

标签 prolog gnu-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)持有,
我期望的是输出类似 yes 的内容或 no但实际输出是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

最佳答案

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

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.

关于prolog - 运行prolog脚本时如何使prolog打印查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14384917/

相关文章:

Prolog - 计算数字的出现次数

prolog - 如何找到对目标没有贡献的事实

list - Prolog - 检查出现次数未按预期工作

Prolog:如何做 "check(a++b++c++d equals d++a++c++b) -> yes"

Prolog - 生成适合给定范围的数字

prolog - 如何在 Prolog 中将数字列表转换为单词列表?

prolog - 剪切子句的开头以及 "cut"、 `!` 和 `fail` 之间的关系

list - 如何在 Prolog 中返回列表?

c - 从 C 独立调用 (GNU) Prolog 的示例