祖父母(X,Y):- 父母(X,母亲(Y))。
通常祖父母将被定义为 Parent(X,Z) , Parent(Z,Y)....但它看起来更自然,作为 X 的父母 Y 的父母,我在上面定义的(无法解释自己任何比这更好,抱歉)我的问题是:这个定义是否仍然被认为是有效的,如果不是,为什么不呢?
祖父母(X,Y):- 父母(X,母亲(Y))。
通常祖父母将被定义为 Parent(X,Z) , Parent(Z,Y)....但它看起来更自然,作为 X 的父母 Y 的父母,我在上面定义的(无法解释自己任何比这更好,抱歉)我的问题是:这个定义是否仍然被认为是有效的,如果不是,为什么不呢?
我可以从您的语法错误的 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))
几乎肯定不是您的意思。