0

祖父母(X,Y):- 父母(X,母亲(Y))。

通常祖父母将被定义为 Parent(X,Z) , Parent(Z,Y)....但它看起来更自然,作为 X 的父母 Y 的父母,我在上面定义的(无法解释自己任何比这更好,抱歉)我的问题是:这个定义是否仍然被认为是有效的,如果不是,为什么不呢?

4

1 回答 1

2

我可以从您的语法错误的 Prolog 中恢复您的意图的最好方法是:

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

虽然这只是对了一半:X 是祖父母,但 Y 不是孙子,只是一个有自己孩子的女孩。为了grandparent(X,Y)得到预期的定义,我们必须在逻辑上将一些东西与中间代统一起来。这就是Z传统概念中的用途。如果您定义mother/2而不是mother/1,那么这mother(Mother, Child)意味着Mother是 的母亲Child,那么您基本上会有一个同义词parent/2,并且您的解决方案与正常定义没有什么不同,只是它无法生成其中一半的解决方案孩子是男性。所以真的,它只有 1/4 正确。

请注意,Prolog 没有其他编程语言意义上的隐式返回值,因此类似的符号parent(X, mother(Y))几乎肯定不是您的意思。

于 2013-04-16T21:29:15.080 回答