证明X在Y之前Prolog

证明X在Y之前Prolog,prolog,Prolog,我有以下事实: before CS206 is CS121 before CS121 is CS120 before CS120 is CS101 before CS101 is CS100 我试图写一些Prolog代码来证明CS206是CS100之前的 这就是我所拥有的,但是我得到了一个堆栈溢出,因为我的递归被搞砸了 before(X,Y) :- before(X,Z), before(Z,Y). before(X,X). before(CS101,CS100). before(CS120,

我有以下事实:

before CS206 is CS121
before CS121 is CS120
before CS120 is CS101
before CS101 is CS100
我试图写一些Prolog代码来证明CS206是CS100之前的

这就是我所拥有的,但是我得到了一个堆栈溢出,因为我的递归被搞砸了

before(X,Y) :- before(X,Z), before(Z,Y).
before(X,X).
before(CS101,CS100).
before(CS120,CS101).
before(CS121,CS120).
before(CS206,CS121).

在Prolog中,以大写字母开头的原子是单引号,否则它们就是变量。因此,
CS101
是一个变量,
'CS101'
是和atom

所以你的事实应该写成

before('CS101', 'CS100').
before('CS120', 'CS101').
before('CS121', 'CS120').
before('CS206', 'CS121').
仅添加以下规则

before(X, Y) :- before(X, Z), before(Z, Y).
你应该能够证明这一点

before('CS206', 'CS100')

是真的。

在(X,X)
是真的吗
X
出现在
X
之前?是的,你是对的,不应该出现在那里