私はプロローグが初めてです。私の知る限り、Pure Prolog は Horn 句に制限されています。これは非常に単純なプロローグプログラムです -
% student( Snr , FirstName , LastName , Semester ).
student( 1000 , 'Anna' , 'Arm' , 'ti2' ) .
student( 1001 , 'Rita' , 'Reich' , 'ti2' ) .
student( 1002 , 'Peter' , 'Reich' , 'ti2' ) .
student( 1003 , 'Peter' , 'Petersen' , 'ti7' ) .
% course( Semester , Course ) .
course( 'ti2' , 'Mathe2' ) .
course( 'ti2' , 'Physics2' ) .
course( 'ti7' , 'pdv2' ) .
musttake(M,V,N,S,C) :- student(M,V,N,S), course(S,C).
musttakereverse(M,V,N,S,C) :- course(S,C), student(M,V,N,S).
私の大学のスライドには、Pure Prolog のルールでゴールの順序を逆にしても、結果の順序は変更されるべきではないと書かれています。上記のコードには、実装した 2 つのルールがあります。目標の順序を変更しただけですmusttake
。musttakereverse
したがって、スライドによると、結果の順序は実行時に変更されるべきではありません。しかし、コードを実行すると、異なる順序で結果が得られます (私の理解によると、上記のプログラムは にありpure prolog
ます)。
だから、それが本当かどうか知りたい
ゴールでの順序の変更は、純粋な Prolog コードでの結果の順序を変更しません。
ありがとう!