【发布时间】:2016-05-08 01:02:49
【问题描述】:
我是 Prolog 编程的新手。我正在使用累加器进行递归分类谓词(我相信我需要累加器)。假设我有以下规则:
species(tiger).
species(carnivora).
species(ferae).
species(scrotifera).
species(laurasiatheria).
isa(tiger,carnivora).
isa(carnivora,ferae).
isa(ferae,scrotifera).
isa(scrotifera,laurasiatheria).
isa(laurasiatheria, mammalia).
我需要返回给定物种的类层次结构的分类谓词。这是我的工作:
classification_aux(mammalia,[H|T],[]).
classification_aux(Specie, Class, Accum) :-
isa(Specie, Y),
classification_aux(Y, [Y|Class], Accum).
classification(Specie, Class) :- classification_aux(Specie,Class,[]).
这是它应该如何工作的示例:
classification(gray_tree_frog, X).
X = [amphibia, anura, hylidae, hyla].
编辑:我改进了我的代码。现在它似乎根据跟踪工作。但是什么都没有返回。
【问题讨论】:
-
我觉得你应该看看transitive-closure和
closure0/3的定义。 -
gray_tree_frog不会出现在您的事实库中的任何地方。请在示例中包含所有必要的事实,以得出您想要的结果。 -
@mat,不,这只是一个使用示例,当然,当我测试时,我会说“老虎”)
-
请使您的示例独立,以便查询清楚地表明 显示 事实库的预期结果是什么。例如,请在在您的问题中明确
tiger的预期结果。
标签: prolog