好的,我最后一个序言问题。这是常见的基因学问题。Prolog作业帮助
我想采取事实的列表,并有一个名为后裔的功能, 将返回一个包含所有后代的列表。例如:
给出的规则:
parent('Bob', 'Tim').
parent('Joe', 'Bob').
函数调用:
descendant('Joe', X).
应该返回:
X = ['Bob', 'Tim'].
我能得到它返回的“直接后裔乔'但不是全线。这是我的。
% Recursive case
descendant(X,DList) :- parent(X,A), NewDList = [A|DList],
descendant(A, NewDList).
% Base case, I have a feeling this is wrong.
descendant(_,[]).
此代码只似乎返回true或false,或者只是一个空的[]。
我可以使用一些帮助,我可能需要看看。谢谢。
我不认为这有效,如果有人超过o ne直接后代,例如,如果Joe也是Mary的父母。 – 2010-03-05 16:03:10
你测试过了吗?如果不是,请测试然后批评。我只是测试它。我工作正常。我确定它不适用于某些数据请给出一个证明 – Andrey 2010-03-05 16:06:23
我给出的例子不起作用 - 如果我加上父母('Joe','Mary'),那么Joe的后代仍然列出作为鲍勃和蒂姆(虽然玛丽是作为回溯时的进一步结果) – 2010-03-05 16:16:48