我有这些事实:
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).
答案 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')
是真的。