2

我目前正在尝试在 Tau-Prolog 中实现一些基本的 Prolog 查询。尽管我在 SWI-Prolog 中有工作查询,但我无法实现它们以在 Tau-Prolog 中工作。我想返回数据库中所有具有接口“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>
4

1 回答 1

4

在谓词的定义中使用原子而不是字符串时,在变量的定义中使用sub_atom/5而不是:sub_string/5queryRwBrobot/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)中发现。

于 2020-04-04T19:30:34.397 回答