【问题标题】:Prolog- family tree of childrenProlog-孩子的家谱
【发布时间】:2016-11-05 18:53:28
【问题描述】:

如果我想在 prolog 中递归地遍历一个家谱并只返回每个分支的孩子,我将如何开始呢?

谢谢

【问题讨论】:

  • 我很确定这是我学习 Prolog 的第一课中的一个例子。你有没有尝试过?

标签: recursion prolog traversal


【解决方案1】:

假设下面的树,红色的孩子

一个简单的解决方案可能是:

male(lennart).
male(mike).
male(donald).
male(usain).
male(joar).
male(adam).
male(dan).
male(simon).
female(hillary).
female(elise).
female(lisa).
female(lena).

parent(mike, lennart).
parent(mike, lena).
parent(lennart, donald).
parent(lennart, hillary).
parent(lennart, usain).
parent(lena, adam).
parent(lena, simon).
parent(adam, dan).
parent(donald, lisa).
parent(hillary, joar).
parent(hillary, elise).


child(lisa).
child(joar).
child(elise).
child(dan).
child(simon).

%% predicate rules
father(X,Y) :- male(X),parent(X,Y).
mother(X,Y) :- female(X),parent(X,Y).
son(X,Y) :- male(X),parent(Y,X).
daughter(X,Y) :- female(X),parent(Y,X).

family_children(X, X):-
    child(X).

family_children(X, Child):-
    parent(X,Y),
    family_children(Y, Child).

测试运行:

[debug]  ?- family_children(mike, Child).
Child = lisa ;
Child = joar ;
Child = elise ;
Child = dan ;
Child = simon ;
false.

这只是一个简单的例子,它是如何完成的,这个例子依赖于一个孩子不能有另一个孩子的假设,但是这个解决方案可以很容易地改进,你可以添加像cousin/2,@987654326这样的规则@、sister/2uncle/2 等等……

希望你现在掌握了这个想法,祝​​你好运。

【讨论】:

    猜你喜欢
    • 2016-03-17
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    相关资源
    最近更新 更多