3
我在Prolog看过家族树的各种实现,但是我还没有找到一个做我想做的事情,那就是通过引用彼此来定义孩子和父母。 我想这样做,因为有时我有一个事实,即某人是某个人的孩子,而在其他时候,我有这样的事实,即某人是某人的父母。从这两种事实中,我希望能够问谁是父母,谁是孩子。家族树中的相互参照Prolog规则
我在编码这样的尝试是: -
parent(mary, fred).
child(john, peter).
child(paul, peter).
parent(P, C).
parent(P, C) :- child(C, P).
child (C, P).
child(C, P) :- parent(P, C).
这似乎是工作,只是它会不断地给我重复一遍又一遍相同的结果确定。例如: -
[3] ?- parent(peter, X).
true ;
X = john ;
X = paul ;
true ;
X = john ;
X = paul ;
true
有没有一种方法可以让我得到它停止它给了我之后的全套结果的一次?
更一般地说,这种定义是一种想要做的奇怪事情(因为相互递归)?据报道,我希望能够得到父母或小孩的事实,但也可以从中推断出“相反”的关系。
谢谢!
完美!谢谢 :) – guraaku