Prolog查找变量 %检查两个正方形是否并排排列 列(X,Y,S,X2,Y2,S2):- EndX是X+S,EndY是Y+S, EndX2是X2+S2,EndY2是Y2+S2, ( (EndX=:=X2,((Y>=Y2,Y==Y2,EndY==Y2,Y==Y2,EndY==Y2,Y==Y2,EndY==Y2,Y==Y2,EndY==X2,X==X2,EndX==X2,X==X2,EndX==X2,X==X2,EndX==X2,X==X2,EndX=

Prolog查找变量 %检查两个正方形是否并排排列 列(X,Y,S,X2,Y2,S2):- EndX是X+S,EndY是Y+S, EndX2是X2+S2,EndY2是Y2+S2, ( (EndX=:=X2,((Y>=Y2,Y==Y2,EndY==Y2,Y==Y2,EndY==Y2,Y==Y2,EndY==Y2,Y==Y2,EndY==X2,X==X2,EndX==X2,X==X2,EndX==X2,X==X2,EndX==X2,X==X2,EndX=,prolog,Prolog,只有当我设置所有变量时,它才能正常工作,但我想问一下如何更改它,以便使用: col(0,0,3,1,2,S)。甚至col(0,0,3,X,Y,S)。 有可能吗?我想你可以试试: 有了更多变量,您就可以处理以下范围: ?- col( 0,0,3,1,2,S). S = 2.0 ; false. ?-col(0,0,3,X,Y,S)。 X=3.0, {Y==0.0,S=-Y+{U G6533,{U G6550=3.0-Y+{U G6533}; X=3.0, {Y==3.0,S=-Y+G8171,G

只有当我设置所有变量时,它才能正常工作,但我想问一下如何更改它,以便使用:
col(0,0,3,1,2,S)。
甚至
col(0,0,3,X,Y,S)。
有可能吗?

我想你可以试试:

有了更多变量,您就可以处理以下范围:

?- col( 0,0,3,1,2,S).
S = 2.0 ;
false.
?-col(0,0,3,X,Y,S)。
X=3.0,
{Y=<-0.0,{U G6533>=0.0,S=-Y+{U G6533,{U G6550=3.0-Y+{U G6533};
X=3.0,
{Y==3.0,S=-Y+G8171,G8188=3.0-Y+G8171};
X=0.0,
{Y=<-0.0,{u G10154>=0.0,S=-Y+\u G10154,{u G10171=-Y+\u G10154}。
...
:- [library(clpr)].

col( X, Y, S, X2, Y2, S2):- {
    EndX = X + S, EndY = Y + S,
    EndX2 = X2 + S2, EndY2 = Y2 + S2,
    (
    ( EndX = X2, ( (Y >= Y2, Y =< EndY2);(EndY >= Y2, EndY =< EndY2))); % left-l side
    ( X = X2, ( (Y >= Y2, Y =< EndY2);(EndY >= Y2, EndY =< EndY2))); % left-r side
    ( EndX = EndX2, ( (Y >= Y2, Y =< EndY2);(EndY >= Y2, EndY =< EndY2))); % right-l side
    ( X = EndX2, ( (Y >= Y2, Y =< EndY2);(EndY >= Y2, EndY =< EndY2))); % right-r side
    ( EndY = Y2, ( (X >= X2, X =< EndX2);(EndX >= X2, EndX =< EndX2))); % top-t side
    ( Y = Y2, ( (X >= X2, X =< EndX2);(EndX >= X2, EndX =< EndX2))); % top-b side
    ( EndY = EndY2, ( (X >= X2, X =< EndX2);(EndX >= X2, EndX =< EndX2))); % bottom-t side
    ( Y = EndY2, ( (X >= X2, X =< EndX2);(EndX >= X2, EndX =< EndX2))) % bottom-b side
    )
                }.
?- col( 0,0,3,1,2,S).
S = 2.0 ;
false.
?- col( 0, 0, 3, X,Y, S).
X = 3.0,
{Y=< -0.0, _G6533>=0.0, S= -Y+_G6533, _G6550=3.0-Y+_G6533} ;
X = 3.0,
{Y=<3.0, _G8171>=3.0, S= -Y+_G8171, _G8188=3.0-Y+_G8171} ;
X = 0.0,
{Y=< -0.0, _G10154>=0.0, S= -Y+_G10154, _G10171= -Y+_G10154} .
...