Интерпретатор Тау-Пролог показывает другое поведение, чем SWI-Пролог

В настоящее время я пытаюсь реализовать некоторые базовые запросы Prolog в Tau-Prolog. Хотя у меня есть рабочие запросы в SWI-Prolog, я не могу реализовать их для работы в Tau-Prolog. Я хотел бы вернуть имена всех роботов, которые есть в базе данных и имеют интерфейс "B". Что-то важное, что мне здесь не хватает? Я думаю, что sub_string/5 может быть причиной того, что он не работает. Это также не сработает, когда я вставлю код в пробный интерпретатор на http://tau-prolog.org/

Кто-нибудь знает, как исправить этот запрос, чтобы он работал в Тау-Прологе? Заранее спасибо!

<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 ответ

Решение

Использовать sub_atom/5 вместо того sub_string/5 в определении queryRwB переменная, поскольку вы используете атомы, а не строки, в определении предиката 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.

Другие вопросы по тегам