parent(max,alex).
?- parent(max,alex).
"true."
?- parent(max,jack).
"false."
?- X = parent(max,jack), write(X). // Why X != false?
"X = parent(max, jack)."
如何从查询“parent(max,jack)”(真或假)存储到X答案?
答案 0 :(得分:6)
您要做的是确定parent(max, jack)
是否会成功。通常在Prolog中你会做这样的事情:
foo :-
parent(max, jack),
% if you make it here, the predicate is true
...
foo :-
% since you're here, the predicate is false
然而,这可能会被你正在做的其他事情所掩盖。如果您想更明确地了解它,可以使用条件构造:
foo :-
(parent(max, jack)
-> % true case
; % else case)
如果您希望X为真,如果这是真的,您可以这样做:
foo :-
(parent(max, jack) -> X = true ; X = false),
...
答案 1 :(得分:2)
Prolog没有功能。它有谓词。他们不会做同样的事情。
因此,X = parent(max,jack).
不是对parent
的函数调用,它会将parent(max,jack)
的结果返回到X
。
parent(max,jack)
是一个谓词,用于查询关系parent(max, jack)
是否为真。无论是真是假,prolog会告诉你它是真还是假。
当您输入上述表达式X = parent(max,jack)
时,您正在prolog中使用=/2
谓词。那是统一运营商。这意味着“左边的内容与=右边的内容统一”。如果任何一方都有变量,prolog将尝试实例化变量以使表达式为TRUE。在这种情况下,如果prolog使用表达式X
实例化parent(max,jack)
,则该语句为TRUE。因此,您得到了结果:
X = parent(max,jack).
如果您想查询parent
与未知max
之间的X
关系,请执行以下操作:
parent(max, X).
然后prolog会寻求X
的值来使表达式成立,你会得到:
X = alex.