2015-12-21 4 views
1

Я получаю сообщение об ошибке Maximum number of anyflow variants (1000) exceeded при попытке выполнить этот код:Visual Prolog: Максимальное количество anyflow

findNegative([], []). 
findNegative([Q|V], Y) :- 
    Q > 0, 
    !, 
    findNegative(V, Y). 
findNegative([H1|T1], S) :- 
    findNegative(T1, [H1|S]). 

же при попытке выполнить код из этого ответа: https://stackoverflow.com/a/6671142/4829408

ответ

3

Рассмотрим следующий код:

 
find_negatives([],  []). 
find_negatives([E|Es], Xs) :- E >= 0, find_negatives(Es, Xs). 
find_negatives([E|Es], [E|Xs]) :- E < 0, find_negatives(Es, Xs). 

Пример запроса:

?- find_negatives([1,2,3,-1,-2,-3,0,1,2,0,-1], Xs). 
    Xs = [-1,-2,-3,-1] 
; false. 
+1

Спасибо! И почему бы вам не использовать CUT (!)? – Src

+3

Использование '(!)/0' ** right ** сложно! – repeat