一个任务
在 Prolog 中描述包含以下事实的知识库“俄罗斯统治者”:
- 智者雅罗斯拉夫从 1019 年统治到 1054 年,
- 伊贾斯拉夫一世从 1054 年统治到 1077 年,
- 弗谢沃洛德一世从 1078 年统治到 1093 年,
- Svyatopolk II 从 1092 年统治到 1112 年,
- 弗拉基米尔·莫诺马赫 (Vladimir Monomakh) 在位时间为 1113 年至 1125 年,
- Mstislav the Great 从 1125 年统治到 1132 年。
- 在知识库“俄罗斯统治者”中添加一条定义“Y 年大公”概念的规则,这将确定任意 Y 年俄罗斯统治者的名字。
- 在知识库“俄罗斯的统治者”中添加规则“从 X 年到 Y 年统治”,它允许您显示从 X 年到 Y 年(含)期间统治俄罗斯的所有人员。
- 形式目标:
- 从 1050 年到 1080 年谁统治了俄罗斯?
- 谁是 1092 年的大公?
解决方案
predicates
nondeterm pravil(string,integer,integer) /*name,beginn,end*/
nondeterm pravitel(string,integer) /*name,year*/
clauses
pravil(yaroslavmudryiy,1019,1054).
pravil(izyaslavpervyiy,1054,1077).
pravil(vsevolodpervyiy,1078,1093).
pravil(svyatopolkvtoroy,1092,1112).
pravil(vladimirmonomah,1113,1125).
pravil(mstislavvelikiy,1125,1132).
pravitel(X,Y):-pravil(X,A,B),Y>=A,Y=<B.
goal
pravitel(Y,1092), write(Y), nl.
你能帮我弄清楚 Prolog 代码中的错误是什么(我使用 Visual Prolog v 5.2)吗?
E; Test_Goal, pos: 398, 409 语法错误
这是让我跑步的原因:
它似乎工作得很好:
http://ideone.com/Yvh21k