Получил следующую программу для поиска по глубине, однако предикат depthsearch
всегда отмечен красным, поэтому я не могу запустить программу. В чем проблема?
node(a).
node(b).
node(c).
node(d).
node(e).
node(f).
node(g).
node(h).
node(i).
node(j).
s(a,b). s(a,c).
s(b,d). s(b,e).
s(c,f). s(c,g).
s(d,h).
s(e,i). s(e,j).
goal(j).
goal(f).
depthfirst2( Node, [Node], _) :-
goal( Node).
depthfirst2( Node, [Node | Sol], Maxdepth) :-
Maxdepth > 0,
s( Node, Node1),
Max1 is Maxdepth - 1,
depthfirst2( Node1, Sol, Max1).
Непонятно, какой пролог используется и где вы видите «красный».
Ваш код работает правильно. Попробуйте вызвать предикат как:
?-depthfirst2(a,L,4).
OUTPUT:
L = [a, b, e, j]
L = [a, c, f]
false
Это на Свиш? Он помечает для чтения все, что не используется в той же программе/сегменте, поэтому один предикат, который вы на самом деле вызовете, будет «помечен для чтения» (как «не вызываемый» или «не используемый»). Я думаю, это ошибка/ особенность Swish. Насколько мне известно, расцветка такая же, как и в настольной IDE, где эта расцветка имеет немного больше смысла.