如何为序言族树中的列表编写谓词?

时间:2018-10-15 16:47:16

标签: prolog

对于基本的序言程序,我们将定义以下谓词: 已经定义的谓词(尝试)

a)ancestor(X,Y),表示XY的祖先,即X是父母 YX中的某人是Y的父母的祖先;

b)共同的ancestor(X,Y,Z),表示XY的共同祖先 并且Z,即XYZ的祖先;

c)最接近的公共ancestor(X,Y,Z),这意味着X是最接近的公共 YZ的祖先,即XYZ的共同祖先,没有子代 X中的{}是YZ的共同祖先;


谓词已定义:

1)ancestorList(X,Y,L),如果XY的祖先,而LX的后代(即祖先为X的人)的列表 Y中从X到最近的顺序排列;例如如果约翰是 paul的父母,henry的父母,helen的父母,然后 ancestorList(john,helen,L)应该以{{1​​}}开头 被退回;

2)L = [paul,henry],其中包含descendantTree(X,L)是一个列表结构,表示 L所有后代的树;后代树中的每个节点应为 由一个列表表示,其第一个元素是节点标签,其余元素是其子元素(如果有)的表示;例如如果john的孩子是Xpaul,则mary的孩子是paulhenryjune的唯一孩子 是henryhelen的唯一孩子是mary,并且adamadamjune都不 有任何孩子,那么helen应该成功

descendantTree(john,L)

正在返回(为了便于阅读,此处添加了缩进和换行符, 但您的程序不应执行此操作。

我对如何启动定义的谓词有些困惑。这是我目前拥有的谓词的列表:

    L =
      [john,
        [paul,
           [henry,
              [helen]
             ],
             [june]
          ],
          [mary,
            [adam]
          ]
        ]

在这个序言谓词中有什么地方可以帮助我吗?

谢谢!

0 个答案:

没有答案