述語が同じ情報で既に存在するかどうかをテストして、同じ情報を再度入力できないようにすることができるかどうかは疑問でした。プロローグが重複する述語を避ける
は、私はすでに、単一の述語のためにそれを行うために管理していない:
:- dynamic(test/2).
test(a,b).
top(X,Y) :-
(test(X,Y),
write('Yes'),!
;write('No'),!
).
このバージョンは戻って、うまく動作します「はい」の情報がすでに存在している場合「NO」そうでない場合。
私は、 'test/2'だけでなく、複数のprediactesに対してこれを行うことが可能かどうか疑問に思っていました。 述語 'test'を変数Predに置き換えようとしましたが、残念ながらコンパイルしようとすると構文エラーが発生します。
main(Pred,X,Y) :-
(Pred(X,Y),
write('Yes'),!
;write('No'),!
).
が、このような何かをすることも可能であり、それがある場合にどのようにそれは可能でしょう:ここに は私の試みですか?
Btw私はGNU Prologを使用しています。
大変ありがとうございます:D !!
が、それはすべきではないが、 ' - >'されたif-then-elseで? –
述語の存在を確認していません。特定のクエリまたは事実が真で正しいかどうかを確認していますか?'Pred'が述語として存在するかどうかを調べることは一つですが、' test(X、Y) '(あるいは' call(Pred、X、Y) ')が特定の' /または 'Y'。 – lurker