Я не понимаю, как правильно использовать разрез. Например, в этом случае: flatten, действительно ли это необходимо? Он работает для меня даже без обоих предикатов (я попытался удалить). Каковы случаи, которые могут привести к возврату назад к разрезу? Удаления порезов у вас есть та же реализация книги «Искусство Пролога» (Шапиро Е., Sterling L.), который:Пролог - понять использование разреза
flatten([X|Xs],Ys) :-
flatten(X,Ysl),
flatten(Xs,Ys2),
append(Ys1,Ys2,Ys).
flatten(X,[X]) :-
constant(X),
X\=[].
flatten([],[]).
, что приводит меня к другому вопросу: нужно во втором чтобы проверить, не является ли это список? Если это один термин, не будет объединяться с первым предложением ... не так ли?
Какое описание предиката 'constant/1'? Это то же самое, что «атомный/1»? – dasblinkenlight
да, эта книга называйте так. – rok