Tau-Prolog 解释器显示出与 SWI-Prolog 不同的行为
Tau-Prolog Interpreter shows different behaviour than SWI-Prolog
我目前正在尝试在 Tau-Prolog 中实现一些基本的 Prolog 查询。虽然我在 SWI-Prolog 中有工作查询,但我无法实现它们以在 Tau-Prolog 中工作。
我想要 return 数据库中所有具有接口 "B" 的机器人的名称。
我在这里缺少什么重要的东西吗?我认为 sub_string/5 可能是它不起作用的原因。当我将代码粘贴到 http://tau-prolog.org/
上的试用解释器时,它也不起作用
有谁知道修复此查询的方法,以便它可以在 Tau-Prolog 中运行?提前致谢!
<script>
var session = pl.create(1000)
var database = `
robot('Roboter1','A', 1, 550).
robot('Roboter2','C', 2, 340).
robot('Roboter3','B', 2, 430).
robot('Roboter4','A', 2, 200).
robot('Roboter5','B', 3, 260).
`
function start_query_RwB(){
query_RwB();
}
function query_RwB(){
var queryRwB = "queryRwB :-write('Interface B has: '),robot(Name, Interface,_,_),sub_string(Interface,_,_,_,'B'),write(Name),nl, fail."
var code_pl = database.concat(queryRwB);
var parsed = session.consult(code_pl)
var query = session.query('queryRwB.')
function inform(msg) {
show_result4.innerHTML += msg
}
session.current_output.stream.put = inform;
var callback = function(answer) {
}
session.answer(callback);
}
</script>
在 queryRwB
变量的定义中使用 sub_atom/5
而不是 sub_string/5
,因为在谓词 robot/4
的定义中使用原子而不是字符串:
var queryRwB = "queryRwB :-write('Interface B has: '),robot(Name, Interface,_,_), sub_atom(Interface,_,_,_,'B'),write(Name),nl, fail."
请注意,sub_atom/5
是标准谓词(由 Tau Prolog 实现),而 sub_string/5
是专有谓词,仅在某些 Prolog 系统(如 ECLiPSe 和 SWI-Prolog)中发现。
我目前正在尝试在 Tau-Prolog 中实现一些基本的 Prolog 查询。虽然我在 SWI-Prolog 中有工作查询,但我无法实现它们以在 Tau-Prolog 中工作。 我想要 return 数据库中所有具有接口 "B" 的机器人的名称。 我在这里缺少什么重要的东西吗?我认为 sub_string/5 可能是它不起作用的原因。当我将代码粘贴到 http://tau-prolog.org/
上的试用解释器时,它也不起作用有谁知道修复此查询的方法,以便它可以在 Tau-Prolog 中运行?提前致谢!
<script>
var session = pl.create(1000)
var database = `
robot('Roboter1','A', 1, 550).
robot('Roboter2','C', 2, 340).
robot('Roboter3','B', 2, 430).
robot('Roboter4','A', 2, 200).
robot('Roboter5','B', 3, 260).
`
function start_query_RwB(){
query_RwB();
}
function query_RwB(){
var queryRwB = "queryRwB :-write('Interface B has: '),robot(Name, Interface,_,_),sub_string(Interface,_,_,_,'B'),write(Name),nl, fail."
var code_pl = database.concat(queryRwB);
var parsed = session.consult(code_pl)
var query = session.query('queryRwB.')
function inform(msg) {
show_result4.innerHTML += msg
}
session.current_output.stream.put = inform;
var callback = function(answer) {
}
session.answer(callback);
}
</script>
在 queryRwB
变量的定义中使用 sub_atom/5
而不是 sub_string/5
,因为在谓词 robot/4
的定义中使用原子而不是字符串:
var queryRwB = "queryRwB :-write('Interface B has: '),robot(Name, Interface,_,_), sub_atom(Interface,_,_,_,'B'),write(Name),nl, fail."
请注意,sub_atom/5
是标准谓词(由 Tau Prolog 实现),而 sub_string/5
是专有谓词,仅在某些 Prolog 系统(如 ECLiPSe 和 SWI-Prolog)中发现。