2
votes

I'm currently trying to implement some basic Prolog queries in Tau-Prolog. Although I have working queries in SWI-Prolog, I can't implement them to work in Tau-Prolog. I would like to return the name of all Robots that are in the database and have the Interface "B". Is there something important I am missing here? I think that sub_string/5 might be the reason why it's not working. It also won't work when I paste the Code into the trial interpreter on http://tau-prolog.org/

Does anyone know a way to fix this query so it could work in Tau-Prolog? Thanks in advance!

<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>
1
Please, rather post the code you pasted into the "trial interpreter"false

1 Answers

4
votes

Use sub_atom/5 instead of sub_string/5 in the definition of the queryRwB variable as you use atoms, not strings, in the definition of the predicate robot/4:

var queryRwB = "queryRwB :-write('Interface B has: '),robot(Name, Interface,_,_), sub_atom(Interface,_,_,_,'B'),write(Name),nl, fail."

Note that sub_atom/5 is a standard predicate (that's implemented by Tau Prolog) while sub_string/5 is a proprietary predicate only found in some Prolog systems like ECLiPSe and SWI-Prolog.