我对序言很陌生。据我所知,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
)。
所以,我想知道这是不是真的
Goal 中的顺序更改不会更改 Pure Prolog 代码中结果的顺序。
谢谢!