对于基本的序言程序,我们将定义以下谓词: 已经定义的谓词(尝试)
a)ancestor(X,Y)
,表示X
是Y
的祖先,即X
是父母
Y
或X
中的某人是Y
的父母的祖先;
b)共同的ancestor(X,Y,Z)
,表示X
是Y
的共同祖先
并且Z
,即X
是Y
和Z
的祖先;
c)最接近的公共ancestor(X,Y,Z)
,这意味着X
是最接近的公共
Y
和Z
的祖先,即X
是Y
和Z
的共同祖先,没有子代
X
中的{}是Y
和Z
的共同祖先;
谓词未已定义:
1)ancestorList(X,Y,L)
,如果X
是Y
的祖先,而L
是
X
的后代(即祖先为X
的人)的列表
Y
中从X
到最近的顺序排列;例如如果约翰是
paul
的父母,henry
的父母,helen
的父母,然后
ancestorList(john,helen,L)
应该以{{1}}开头
被退回;
2)L = [paul,henry]
,其中包含descendantTree(X,L)
是一个列表结构,表示
L
所有后代的树;后代树中的每个节点应为
由一个列表表示,其第一个元素是节点标签,其余元素是其子元素(如果有)的表示;例如如果john的孩子是X
和paul
,则mary
的孩子是paul
和henry
,june
的唯一孩子
是henry
,helen
的唯一孩子是mary
,并且adam
,adam
和june
都不
有任何孩子,那么helen
应该成功
descendantTree(john,L)
正在返回(为了便于阅读,此处添加了缩进和换行符, 但您的程序不应执行此操作。
我对如何启动定义的谓词有些困惑。这是我目前拥有的谓词的列表:
L =
[john,
[paul,
[henry,
[helen]
],
[june]
],
[mary,
[adam]
]
]
在这个序言谓词中有什么地方可以帮助我吗?
谢谢!