从列表中选择列表?

时间:2016-03-23 13:41:08

标签: prolog

我有personsparent事实

的列表
person(nameA).
person(nameB).
person(nameC).

parent(parentname, children).

我需要编写一条规则hasnochild(X).来遍历所有没有孩子的person

这是我到目前为止所写的内容。 hasnochild(X) :- parent(Z, X). 但它会返回所有有孩子的人的姓名。如何让那些没有孩子的人接受?

类似于person的整个列表,取消了我所写的内容。

1 个答案:

答案 0 :(得分:0)

你必须尝试将人(你的问题中的X)与数据库中的人统一起来,然后只有在那个人没有孩子的情况下才能成功。

E.g:

hasnochild(X):-
  person(X),         % X is a Person
  \+ parent(X, _).  % with no children

如果您知道person(X)的第一个参数是一个人,则可以避免对parent/2的调用。