将结果存储到prolog中的变量?

时间:2014-01-07 22:31:53

标签: prolog

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答案?

2 个答案:

答案 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.