Prologプログラミングの初心者です。私はアキュムレータで再帰的な分類述語をやっている(私はアキュムレータが必要だと思う)。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].
編集:私は私のコードを改善しました。今はトレースに従って動作するようです。しかし、何も返されません。
[タグ:推移閉包]と['closure0/3'](http://stackoverflow.com/questions/26946133/definition-of-reflexive-transitive-closure)の定義を見てください。 。 – mat
'gray_tree_frog'はファクトベースのどこにも出現しません。あなたの事例であなたが望むものを得るために必要な事実をすべて含めてください。 – mat
@mat、いいえ、それはもちろん、私は私が "虎"と言うことを呼ぶことをテストしたときに使用例です) – yerassyl