【问题标题】:Prolog ancestor clause using lists使用列表的 Prolog 祖先子句
【发布时间】:2013-03-13 23:04:38
【问题描述】:

我正在努力理解这个基本的 Prolog 概念。

我理解确定一个人的祖先的基本条款如下:

ancestor(X, Y) :- parent(X, Y).
ancestor(X, Y) :- parent(X, Z), ancestor(Z, Y).

但是,我试图弄清楚这对于实现列表以确定父母的孩子的序言程序是如何工作的,即:

parent_of(simon, [matthew, andrea, joanne]).

为了确定某人是否是某人的父亲,我正在使用这个完美的方法:

father_of(X, Y) :- parent_of(X, List), my_member(Y, List), male(X).

但是,我似乎无法弄清楚如何使它适用于上面的祖先子句。

【问题讨论】:

    标签: prolog


    【解决方案1】:

    member/2 它是元素和列表之间更简单的关系:

    ancestor_of(X, Y) :- parent_of(X, Ys), member(Y, Ys).
    ancestor_of(X, Y) :- parent_of(X, Zs), member(Z, Zs), ancestor_of(Z, Y).
    

    我添加了一个关系来测试传递规则

    parent_of(simon, [matthew, andrea, joanne]).
    parent_of(andrea, [bill, joan]).
    

    产量

    ?- ancestor_of(andrea,A).
    A = bill ;
    A = joan ;
    false.
    
    ?- ancestor_of(simon,A).
    A = matthew ;
    A = andrea ;
    A = joanne ;
    A = bill ;
    A = joan ;
    false.
    
    ?- ancestor_of(X,bill).
    X = andrea ;
    X = simon ;
    false.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多