カテゴリの束と、それらのカテゴリのアイテムを想定します。いくつかのカテゴリは、他のものの同義語です。たとえば、mobile_phoneやcell_phoneなどです。規則syn(mobile_phone, cell_phone).
とis_a(iphone, cell_phone).
が与えられているので、ナレッジベースにその規則が存在しない場合でも、真を返すためにis_a(iphone, mobile_phone).
を呼び出す必要があります。ここで推移プロパティは、プロローグ内で無限ループを引き起こします
は、私が持っているものだ。これは何をしたい
is_syn('antibiotics' , 'antineoplastics').
is_a('mitomycin', 'antibiotics').
is_a('doxorubicin liposomal', 'antineoplastics').
is_a('idarubicin', 'antineoplastics').
is_a('pentostatin', 'antibiotics').
syn(X, Y) :-
( is_syn(Y, X)
; is_syn(X, Y)
).
is_a(X, Y) :-
syn(Y, Z),
is_a(X, Z).
ファクトを明示的に追加して、問題を再現できるようにしてください。 – false
スニペットを追加しました。はっきりするために、出力されていますが、同じ出力上で繰り返しループします。 – bendl
この例では、私が観察したエラーを再現しています。電話に関しては...もちろん、分かりやすくするためでした。 'is_a( 'idarubicin'、X)のクエリを試してください。それは無限に抗新生物を返します。さらに悪いことに 'is_a(something、X) 'のようなクエリです。何も出力なしで無限ループします。 – bendl