我试图编写一个Prolog谓词,该谓词使用SWI-Prolog 7生成一条水平线。我从这里引用的一个简单生成器开始:Simple Prolog generator
在玩耍时,我想出了一个我不明白的结果。如果我创建这些规则(hline打算使用两个x坐标(X和A)和一个Y坐标Y,并在S和T中生成水平线的X和Y坐标:
gen(Cur, Top, Cur) :- =<(Cur, Top).
gen(Cur, Top, Next):- =<(Cur, Top), is(Cur1, +(Cur, 1)), gen(Cur1, Top, Next).
hline(X,A,Y,S,T) :- gen(X,A,S), T is Y.
当我运行此查询时:
hline(0,5,0,X,Y).
我得到这些结果。第一个是我不了解的:
X = Y, Y = 0
X = 1,
Y = 0
X = 2,
Y = 0
X = 3,
Y = 0
X = 4,
Y = 0
X = 5,
Y = 0
有人可以解释为什么第一个结果是X = Y,Y = 0吗?通过统一或归约,我什至看不到X和Y甚至在同一子句中。