【问题标题】:Prolog Facts and Rules in UseProlog 使用中的事实和规则
【发布时间】:2016-09-02 16:47:42
【问题描述】:

今天是我学习 Prolog 的第二天。 我对Prolog知之甚少。 我有一个包含这些事实/规则的文件。

mother(X,Y):-
    parent(X,Y),
    female(X).
son(X,Y):-
    parent(Y,X),
    male(X).
daughter(X,Y):-
    parent(Y,X),
    female(X).
grandmother(X,Y):-
    parent(Z,Y),
    parent(X,Z),
    female(X).

son(a,b).
daughter(b,c).

我可以提问

?- mother(b,a).
?- parent(b,a).
?- grandmother(c,a).

序言。

【问题讨论】:

  • 你有什么问题?
  • 对不起,如果我的英语这么差,我可以从 prolog 询问谁是 a 的母亲?
  • 你的英文好像不错,只是没看懂你的问题是什么。你想知道什么?
  • 如果我说 a 是 b 的儿子,b 和 b 是女性,prolog 可以说我 b 是 a 的母亲??

标签: prolog


【解决方案1】:

不确定。

你想推断(1)ba 的母亲,(2)ba 的父母,(3)ca 的祖母开始仅从(a)ab 的儿子和(b)bc 的女儿这一事实?

在这种情况下,在我看来,您可以从以下事实和规则中推断出(1)和(2)

son(a, b).
daughter(b, c).

female(X) :-
   daughter(X, _).

parent(X, Y) :-
   son(Y, X).

mother(X, Y) :-
   female(X),
   parent(X, Y).

并且不知道如何推断 (3)(ca 的祖母),因为我可以推断 ca 的祖父母,但我不知道如何推断 @ 987654336@是女性。

添加事实female(c) 和规则grandmother(加上从daughter 派生的parent 规则),您可以使用以下事实和规则推导出(3)。

son(a, b).
daughter(b, c).
female(c).

female(X) :-
  daughter(X, _).

parent(X, Y) :-
  son(Y, X).

parent(X, Y) :-
  daughter(Y, X).

mother(X, Y) :-
  female(X),
  parent(X, Y).

grandmother(X, Z):-
  mother(X, Y),
  parent(Y, Z).

其他解决方案也是可能的。

【讨论】:

    【解决方案2】:

    son(a,b) 是指 a 是 b 的儿子还是 b 是 a 的儿子? Prolog 不在乎,但您必须决定如何使用它。

    我认为这意味着 b 是 a 的儿子。然而,这不是关于 Prolog 的事实。这只是我对某人的意思的猜测。

    现在,你有信息告诉你谁是一个孩子的母亲吗?

    如果你问 ?- 母亲(Z,a)。 它将使用母亲的定义来尝试满足 ?-女性(Z),父母(Z,a)。 现在它将使用女性的定义将其更改为: ?-女儿(Z,_),父母(Z,a)。 它将使用事实女儿(b,c)来满足 Z=b 的女儿。 那么剩下的查询是: ?- 父母(b,a)。 但我们还没有完成。 b实际上是a的父母吗? 父母有两种定义。所以,试试第一个, 将查询更改为: ?-儿子(a,b)。 成功——符合事实。 所以答案是?-母亲(Z,a)。是 Z=b。

    关于 Prolog 的工作原理,需要记住以下几点:

    • 它总是有一个必须连续满足的一个或多个查询的列表;

      • 它会查找与该列表中的第一个查询匹配的事实或规则;
    • 当它使用规则时,它将列表中的第一个查询变成一个或多个查询来替换它;

    • 当它使用事实时,它只是使列表中的第一个查询消失(通过将其与事实匹配),这就是列表最终变为空的方式。

    • 当有多个规则或事实与查询匹配时,Prolog 会尝试第一个匹配的规则或事实,但会记住下一个是什么。如果它最终不能满足所有查询,它会备份到最近未尝试的替代方案。

    当我教 Prolog 时,我让全班同学大声朗诵“最近未尝试过的替代方案”,因为这是你必须永远记住的事情。

    这可能有用:

    http://www.covingtoninnovations.com/books/PPID.pdf

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多