Переписать недетерминированный предикат в предикат процедуры - PullRequest
0 голосов
/ 30 апреля 2019

Я пытался переписать программу поиска в ширину с VIP5 на VIP9, работа почти завершена. Но у меня проблема с одним предикатом.

Компилятор VIP говорит: «Предикат 'main :: search_bdth / 2 (i, i)', который объявлен как" процедура ", на самом деле является" недетерминированным "".

Я новичок в Прологе, и это часть моей первой программы.

class predicates
    search_bdth : (string, string).
    bdth : (slistlist, string, slist [out]) nondeterm.
    show_answer : (slist) determ.

clauses
   search_bdth(Start, Finish) :-
       bdth([[Start]], Finish, Way),
       show_answer(Way).

   bdth([[Finish | Tail] | _], Finish, [Finish | Tail]).
   bdth([TempWay | OtherWays], Finish, Way) :-
       Ways = [ W || prolong(TempWay, W) ],
       append(OtherWays, Ways, NewWays),
       bdth(NewWays, Finish, Way).

   show_answer([_]) :-
       !.
   show_answer([A, B | Tail]) :-
       show_answer([B 

Я, кроме вывода, вот так:

a -> b

b -> d

d -> e

е -> с

...