Recursion Prolog中祖父母的定义,有任何Prolog程序员愿意帮助澄清这一点吗?
祖父母(X,Y):-父母(X,母亲(Y)) 通常,祖父母会被定义为父母(X,Z),父母(Z,Y)……但对我来说,作为X的父母Y的父母,这看起来更自然,正如我上面所定义的(对不起,我无法更好地解释我自己)Recursion Prolog中祖父母的定义,有任何Prolog程序员愿意帮助澄清这一点吗?,recursion,prolog,family-tree,Recursion,Prolog,Family Tree,祖父母(X,Y):-父母(X,母亲(Y)) 通常,祖父母会被定义为父母(X,Z),父母(Z,Y)……但对我来说,作为X的父母Y的父母,这看起来更自然,正如我上面所定义的(对不起,我无法更好地解释我自己) 我的问题是:这个定义是否仍然有效,如果不是,原因是什么?我能从语法错误的序言中恢复您的意图的最好方法是: grandparent(X, Y) :- parent(X, Y), mother(Y). 但这仅仅是事实的一半:X是祖父母,但Y不是孙子,只是一个带着自己孩子的女婴。为了让祖父母(X,Y
我的问题是:这个定义是否仍然有效,如果不是,原因是什么?我能从语法错误的序言中恢复您的意图的最好方法是:
grandparent(X, Y) :- parent(X, Y), mother(Y).
但这仅仅是事实的一半:X是祖父母,但Y不是孙子,只是一个带着自己孩子的女婴。为了让祖父母(X,Y)得到预期的定义,我们必须在逻辑上把某些东西与中间一代统一起来。这就是传统概念中的Z
。如果您定义了mother/2
而不是mother/1
,那么mother(mother,Child)
意味着mother
是Child
的母亲,那么您基本上就有了parent/2
的同义词,并且您的解决方案与正常的定义没有什么不同,但如果孩子是男性,它将无法产生一半的解决方案。所以说真的,它只对了1/4
请注意,Prolog没有其他编程语言意义上的隐式返回值,因此类似于
parent(X,mother(Y))
的表示法几乎肯定不是您的意思。老实说,这只是完整代码的一部分,除此之外,还有父辈祖父母,被定义为parent(X,father(Y))父母被定义为父亲(X,Y);母亲(X,Y)我只是拿一个代码示例作为例子,这样你就不必通读你不需要的代码行了。除此之外,我还有一个关于男性和女性的定义。我开始认为我应该粘贴整个代码…一个最小的工作示例(或者最小的非工作示例,如果问题是bug)通常是最好的策略。除此之外,整个代码减去运行该示例所不需要的部分也很好。