Prolog-切割如何与OR运算符结合使用?
我写了这个小程序:Prolog-切割如何与OR运算符结合使用?,prolog,prolog-cut,Prolog,Prolog Cut,我写了这个小程序: married(guy1, fem1). married(guy2, fem2). married_to(X,Y):-!, married(X,Y); married(Y,X). 印刷品: X = guy1, Y = fem1 ; X = guy2, Y = fem2. 我的目的是打印已婚夫妇,但每次打印一次。上面的规则对我有效,但我不明白为什么!这是怎么回事 这有什么区别: 已婚(X,Y):-已婚(X,Y);已婚(Y,X)。 这张照片是: X = guy1, Y =
married(guy1, fem1).
married(guy2, fem2).
married_to(X,Y):-!, married(X,Y); married(Y,X).
印刷品:
X = guy1,
Y = fem1 ;
X = guy2,
Y = fem2.
我的目的是打印已婚夫妇,但每次打印一次。上面的规则对我有效,但我不明白为什么!这是怎么回事
这有什么区别:
已婚(X,Y):-已婚(X,Y);已婚(Y,X)。
这张照片是:
X = guy1,
Y = fem1 ;
X = guy2,
Y = fem2 ;
X = fem1,
Y = guy1 ;
X = fem2,
Y = guy2.
剪切将执行提交到析取上的第一个分支。因此,你的规则是:
married_to(X,Y):-!, married(X,Y); married(Y,X).
在操作上与:
married_to(X,Y):-!, married(X,Y).
并且,假设u to/2
谓词没有其他子句,相当于:
married_to(X,Y):- married(X,Y).
剪切将执行提交到析取上的第一个分支。因此,你的规则是:
married_to(X,Y):-!, married(X,Y); married(Y,X).
在操作上与:
married_to(X,Y):-!, married(X,Y).
并且,假设u to/2
谓词没有其他子句,相当于:
married_to(X,Y):- married(X,Y).
假设你有一个与(X,Y)等价的定义
!,已婚(X,Y);已婚(Y,X)。
。如果true
失败了,那么我们会跳到另一个选择,但是因为它不会失败,所以我们坚定地站在(析取)的后续分支上
看看你的代码是什么
married_to(X,Y):- ( !, married(X,Y) ) ; ( married(Y,X) ).
而不是
married_to(X,Y):- !, ( married(X,Y) ; married(Y,X) ).
实际上相当于
married_to(X,Y):- !, married(X,Y).
married_to(X,Y):- married(Y,X).
也许有了这个,就更容易对这里发生的事情有一种“感觉”。显然,谓词的第二个从句被截断了。:)我们致力于第一条,第二条根本没有工作的机会。想象你有与(X,Y)相同的定义:-真的!,已婚(X,Y);已婚(Y,X)。。如果
true
失败了,那么我们会跳到另一个选择,但是因为它不会失败,所以我们坚定地站在(析取)的后续分支上
看看你的代码是什么
married_to(X,Y):- ( !, married(X,Y) ) ; ( married(Y,X) ).
而不是
married_to(X,Y):- !, ( married(X,Y) ; married(Y,X) ).
实际上相当于
married_to(X,Y):- !, married(X,Y).
married_to(X,Y):- married(Y,X).
也许有了这个,就更容易对这里发生的事情有一种“感觉”。显然,谓词的第二个从句被截断了。:)我们遵守第一条,第二条根本没有机会工作