证明X在Y Prolog之前

时间:2016-08-20 22:26:20

标签: prolog

我有这些事实:

before CS206 is CS121
before CS121 is CS120
before CS120 is CS101
before CS101 is CS100

我正在尝试编写一些Prolog代码来证明before CS206 is 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).

1 个答案:

答案 0 :(得分:2)

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

所以你的事实应该写成

before('CS101', 'CS100').
before('CS120', 'CS101').
before('CS121', 'CS120').
before('CS206', 'CS121').

仅添加以下规则

before(X, Y) :- before(X, Z), before(Z, Y).

你应该能够证明

before('CS206', 'CS100')

是真的。