Что я хочу сделать: я хочу написать хвостовую рекурсивную программу на Прологе, которая ищет в списке целых чисел самую длинную возрастающую последовательность и сохраняет начальный и конечный индекс этого подсписка.
e.g.
?- longest_asc_sublist([1,2,3,2,8,4,7,8,10,11,7,-1],From,To).
From = 6,
To = 10.
Что у меня есть до сих пор и в чем моя проблема: в основном я пытался реализовать алгоритм с помощью его псевдокода, который делал бы именно то, что мне нужно, но моя проблема в том, что я не могу понять, как сделать это работает с операторами if, без следующего за ними «else», которые имеют несколько действий в своем заявлении или делают это без if
longest_asc_sublist(List,_,_) :- longest_asc_sublist(List,1,1,1,0,1,1).
longest_asc_sublist([],V,K,K,_,V,_).
longest_asc_sublist([X,Xs|Xss],_,_,K,T,V,M) :-
K1 is K+1, T1 is T+1,
Xs < X, !, % this would be an if condition
T1 is 1, V1 is K, % and this the statement
T1 > M, !, % 2.if condition
M1 is T1, To1 is K, From1 is V, % statement
longest_asc_sublist(Xss,To1,From1,K1,T1,V1,M1).
Моя самая большая проблема заключается в том, что я не могу заставить его выйти за пределы «Xs ‹ X», как только он оценивается как false, программа завершается и возвращает false.
Итак, мои 2 вопроса:
Как я могу заставить эту программу не завершаться, когда «Xs ‹ X» ложно?
Есть ли способ реализовать это, если это так?:
(Xs < X ->
(T1 is 1, V1 is K)),
без того, чтобы это вызывало прекращение, если оно оценивается как ложное?